使用vb.net开发简单的socket通信(环境是visual stdio 2019)

    • 说明
      • 参考文章
    • 实现功能
  • 效果展示
  • 代码
    • 服务端
    • 客户端
  • 总结

说明

之前用vb6编程时都是用的winsock控件进行网络通信,现在研究.net平台发现网上说的socket更好用,不过在网上一直都没有找到合适的代码,下面我来详细讲解下我的方法(小白一枚,望大佬指出不足!!!)

参考文章

C#实现socket通信:https://www.cnblogs.com/liangweitao/p/10862611.html
vb.net检测端口是否被占用 https://blog.csdn.net/u011993802/article/details/106954226

实现功能

一个服务端和多个客户端的互动

效果展示

代码

服务端

Imports System.Net
Imports System.Net.Sockets
Imports System.Net.NetworkInformation
Imports System.Text
Imports System.Threading
Public Class Form1Private mynewTextBox As New TextBox         ''''''''''''''''''''''''''''''添加需要的控件Private sendTextBox As New TextBoxPrivate portTextBox As New TextBoxPrivate newButton As New ButtonPrivate sendButton As New ButtonPrivate ip As IPAddress = IPAddress.Any  '''''''''''''''''''''''''''''''''''''''''''添加需要的元素Private newPort As Integer = 10000Private point(1000) As IPEndPointPrivate socketSend(1000) As SocketPrivate nx As Integer = -1   '''''''''''''''''''''''''标记连接了几个客户端Private Sub ShowMsg(ByVal msg As String) ''''''''''''''''''''用于展示信息mynewTextBox.AppendText(msg & vbCrLf)End SubPrivate Function searchindexbyport(ByVal arr As Array, ByVal theport As Integer) As Integer ''''''''''''''''''''''''''''''''根据端口查找用于发送信息的socket(socketSend)的指数TryDim mypoint As IPEndPointmypoint = New IPEndPoint(ip, Convert.ToInt32(theport))searchindexbyport = -1For i As Integer = 0 To arr.LengthIf arr(i).ToString = mypoint.ToString Thensearchindexbyport = iExit ForEnd IfNextCatchEnd TryEnd FunctionPrivate Sub Send() '''''''''''''''''''''''''''发送消息Dim str As StringDim socketSendnum As Integerstr = sendTextBox.Text.Trim()socketSendnum = searchindexbyport(point, Val(portTextBox.Text))Dim buffer As Byte() = Encoding.UTF8.GetBytes(str)socketSend(socketSendnum).Send(buffer)End SubPrivate Sub openS()            ''''''''''''''''''''''打开客户端,建立连接TryDim Sname As String = "C:\Users\dell\Desktop\工程\使用vb.net开发简单的socket通信\客户端\bin\Debug\客户端.exe"     ''''''''''''''''这里写自己客户端的文件位置Dim socketWatch As SocketDim thread As Threadnx = nx + 1getnewPort()socketWatch = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)point(nx) = New IPEndPoint(ip, Convert.ToInt32(newPort))socketWatch.Bind(point(nx))ShowMsg(String.Join(" ", "监听成功! ", newPort))socketWatch.Listen(10)thread = New Thread(AddressOf Listen) ''''''''''''''''''''''添加线程以实现侦听过程thread.Name = "thread" & nx.ToString '''''''''''''''''''''方便后期调试thread.IsBackground = Truethread.Start(socketWatch)Sname = String.Join(" ", Sname, newPort)'''''''''''''''''''''''''shell客户端同时传递端口参数Shell(Sname, AppWinStyle.NormalFocus)CatchEnd TryEnd SubPrivate Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load ''''''''''''''''''''''''''''load事件初始化控件mynewTextBox.Multiline = TruemynewTextBox.Height = 200mynewTextBox.Width = 250mynewTextBox.Location = New Point(0, 0)Me.Controls.Add(mynewTextBox)sendTextBox.Width = 200sendTextBox.Location = New Point(250, 0)sendTextBox.Text = ”在这个文本框输入你要发送的消息“Me.Controls.Add(sendTextBox)portTextBox.Width = 200portTextBox.Location = New Point(250, 70)portTextBox.Text = ”10001“Me.Controls.Add(portTextBox)sendButton.Location = New Point(20, 220)sendButton.Text = "发送"Me.Controls.Add(sendButton)AddHandler sendButton.Click, AddressOf Send  '''''''''''''''''''''绑定事件newButton.Location = New Point(100, 220)newButton.Text = "新增客户端"Me.Controls.Add(newButton)AddHandler newButton.Click, AddressOf openSControl.CheckForIllegalCrossThreadCalls = False       '''''''''''''''''''''''确保可以安全的访问窗体控件End SubPrivate Sub getnewPort() '''''''''''得到一个未使用端口,并保存到newport里面DoIf PortInUse(newPort) <> 0 Then newPort = newPort + 1Loop Until PortInUse(newPort) = 0End SubPublic Shared Function PortInUse(ByVal port As Integer) As Boolean '''''''''''''''''''判断一个端口是否被占用Try'查看UDP端口是否被占用Dim ipProperties As IPGlobalProperties = IPGlobalProperties.GetIPGlobalProperties()Dim ipEndUdpPoints() As IPEndPoint = ipProperties.GetActiveUdpListenersFor Each endPoint As IPEndPoint In ipEndUdpPointsIf endPoint.Port = port ThenReturn TrueEnd IfNext endPoint'查看TCP端口是否被占用Dim ipEndTcpPoints() As IPEndPoint = ipProperties.GetActiveTcpListenersFor Each endPoint As IPEndPoint In ipEndTcpPointsIf endPoint.Port = port ThenReturn TrueEnd IfNext endPointReturn FalseCatch ex As ExceptionReturn FalseEnd TryEnd FunctionPrivate Sub Listen(ByVal o As Object) ''''''''''''''''''侦听TryDim socketWatch As SocketsocketWatch = TryCast(o, Socket)While TruesocketSend(nx) = socketWatch.Accept()ShowMsg(socketSend(nx).RemoteEndPoint.ToString() & ":" & "连接成功!")Dim r_thread As Thread = New Thread(AddressOf Received)r_thread.IsBackground = Truer_thread.Start(socketSend(nx))End WhileCatchEnd TryEnd SubPrivate Sub Received(ByVal o As Object) '''''''''''''''接收客户端传来的消息TryDim socketSend As Socket = TryCast(o, Socket)While TrueDim buffer As Byte() = New Byte(3145727) {}Dim len As Integer = socketSend.Receive(buffer)If len = 0 ThenExit WhileEnd IfDim str As String = Encoding.UTF8.GetString(buffer, 0, len)ShowMsg(socketSend.RemoteEndPoint.ToString & ":" & str) '''''''''''''''''''''''''''将消息进行展示End WhileCatchEnd TryEnd SubEnd Class

客户端

Imports System.Net
Imports System.Net.Sockets
Imports System.Text
Imports System.ThreadingPublic Class Form1''''''''''''''''''''''''''''''添加需要的控件Private mynewTextBox As New TextBoxPrivate sendTextBox As New TextBoxPrivate sendButton As New Button'''''''''''''''''''''''''''''''''''''''添加需要的元素Private myIP As String = "192.168.0.104"         '''''''''''''''''''''''''''''''写入自己的IPPrivate myPort As IntegerPrivate socketSend As SocketPrivate Sub ShowMsg(ByVal str As String) ''''''''''''''''''''用于展示信息mynewTextBox.AppendText(str & vbCrLf)End SubPrivate Sub send() '''''''''''''''''''''''发送消息TryDim msg As String = sendTextBox.Text.Trim()Dim buffer As Byte() = New Byte(3145727) {}buffer = Encoding.UTF8.GetBytes(msg)socketSend.Send(buffer)CatchEnd TryEnd SubPrivate Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load     ''''''''''''''''''''''''''''load事件初始化控件myPort = Val(Command) ''''''''''''''''''''''''''得到服务端分配的端口mynewTextBox.Multiline = TruemynewTextBox.Height = 200mynewTextBox.Width = 250mynewTextBox.Location = New Point(0, 0)Me.Controls.Add(mynewTextBox)sendTextBox.Width = 200sendTextBox.Location = New Point(250, 0)sendTextBox.Text = ”在这个文本框输入你要发送的消息“Me.Controls.Add(sendTextBox)sendButton.Location = New Point(20, 220)sendButton.Text = "发送"Me.Controls.Add(sendButton)AddHandler sendButton.Click, AddressOf send  '''''''''''''''''''''绑定事件Control.CheckForIllegalCrossThreadCalls = FalseConnectS()End SubPrivate Sub ConnectS() '''''''''''''''''''''''连接TrysocketSend = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)Dim ip As IPAddress = IPAddress.Parse(myIP)Dim point As IPEndPoint = New IPEndPoint(ip, Convert.ToInt32(myPort))socketSend.Connect(point)ShowMsg("连接成功!")Dim c_thread As Thread = New Thread(AddressOf Received)c_thread.IsBackground = Truec_thread.Start()Catch __unusedException1__ As ExceptionShowMsg("IP或者端口号错误...")End TryEnd SubPrivate Sub Received() '''''''''''''''接收服务端传来的消息While TrueTryDim buffer As Byte() = New Byte(3145727) {}Dim len As Integer = socketSend.Receive(buffer)If len = 0 ThenExit WhileEnd IfDim str As String = Encoding.UTF8.GetString(buffer, 0, len)ShowMsg(socketSend.RemoteEndPoint.ToString & ":" & str)CatchEnd TryEnd WhileEnd SubEnd Class

总结

以上就是我本次分享的代码,复制粘贴到新建的windows窗体应用的form1里面就可以运行试试!!!!第一次写这种文章,不是很会,希望可以帮到你!!有什么不懂的地方可以留言嘿嘿嘿

使用vb.net开发简单的socket通信相关推荐

  1. 使用Petalinux实现ZYNQ的linux程序开发(实现简单的socket通信程序)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 (一)实现功能及开发环境 一.实现功能 二.开发环境 (二)实现步骤 一.开发环境搭建 1.设置Ubuntu 和 Windo ...

  2. 简单的socket通信实现

    一.什么是socket网络通信? socket也称作"套接字",描述了计算机的IP地址和端口,运行在计算机中的程序之间采用socket进行数据通信.通信的两端都有socket,它是 ...

  3. java 通信 教程_Java实现简单的socket通信教程

    今天学习了一下java如何实现socket通信,感觉难点反而是在io上,因为java对socket封装已经很完善了. 今天代码花了整个晚上调试,主要原因是io的flush问题和命令行下如何运行具有pa ...

  4. Android简单实现Socket通信,客户端连接服务器后,服务器向客户端发送文字数据

    案例实现的是简单的Socket通信,当客户端(Android客户端)连接到指定服务器以后,服务器向客户端发送一句话文字信息(你可以拓展其它的了) 先看一下服务端程序的实现吧 Server.java i ...

  5. java 通讯开发_java之接口开发-初级篇-socket通信

    socket通信实现util包类实现 public class SocketThread extends Thread { public void run() { while (true) { // ...

  6. socket通信之最简单的socket通信

    http://blog.csdn.net/xluren/article/details/8043484#t15 套接字有三种类型 流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRA ...

  7. 虚拟机ubuntu和开发板UDP Socket通信实例

    服务器端的步骤如下: 1. socket:      建立一个socket 2. bind:          将这个socket绑定在某个端口上(AF_INET) 3. recvfrom:  如果没 ...

  8. c语言实现简单的socket通信

    一.通讯示意图 二.函数详解 1.socket()函数 int socket(int domain, int type, int protocol); socket函数对应于普通文件的打开操作.普通文 ...

  9. windows:简单的socket通信

    目录 说明 效果展示 服务端代码 客户端代码 函数和结构体详情 说明 这个示例是写了一个服务端和一个客户端,客户端发数据,服务器接数据. 服务端地址:10.131.8.185              ...

最新文章

  1. 一个用于录制用户输入操作并实时回放的小工具
  2. pta 整型关键字的平方探测法散列
  3. UA MATH567 高维统计II 随机向量3 常见的高维随机向量的分布
  4. key位置 win10生成的ssh_华为路由器配置SSH远程登录,就这么简单
  5. 设置qt的QChart曲线背景色透明
  6. Extra }, or forgotten lendgroup. \makecover
  7. 初一上册计算机教案,人教版七年级上册信息技术教学计划
  8. 获取repeater控件模版列中的控件
  9. 什么是嵌入式工程师,发展前景如何
  10. (74)信号发生器DDS三角波设计(二)(第15天)
  11. js 去除空格回车换行
  12. red hat linux 关闭防火墙,red hat enterprise linux 7关闭防火墙的方法
  13. 简单描述构造方法和析构方法的区别
  14. 使用REST风格架构您需要知道的一些事
  15. hibernate 里面 mysql dialect 配置
  16. vim介绍、vim颜色显示、vim一般模式操作
  17. 借贷记账思考2015.12.28
  18. 中国成品油价为啥会比美国贵30%?
  19. b700a怎么连蓝牙_索尼WI-H700耳机蓝牙连接方法
  20. 有感于李连杰壹基金计划

热门文章

  1. python协程(超详细)
  2. 20170118:File类与IO流,File类,IO流的基本原理,IO流的分类,文件字节流与文件字符流
  3. java datagrid导出excel_从datagridview中导出数据到excel
  4. 淘宝“”升级 小卖家在淘宝总部拉横幅
  5. Windows 10/11 中的快速录屏的 5 种方法
  6. 夭寿啦!奔腾G3260成功安装黑苹果10.10!
  7. 完全卸载webpack和npm
  8. centos8配置DNS服务器可能出现的故障
  9. python求5的阶乘_用python分享5的阶乘 (咋办)用python计算阶乘
  10. coreldraw 长方体_CorelDRAW示意图绘制技巧(二)