做网站 需要多少钱,手表排行榜,乐清建网站,网站ui用什么做C#中简单Socket编程
Socket分为面向连接的套接字(TCP套接字)和面向消息的套接字(UDP 套接字)。我们平时的网络编程是对Socket进行操作。
接下来#xff0c;我用C#语言来进行简单的TCP通信和UDP通信。
一、TCP通信
新建项目SocketTest#xff0c;首先添加TCP通信的客户端代…C#中简单Socket编程
Socket分为面向连接的套接字(TCP套接字)和面向消息的套接字(UDP 套接字)。我们平时的网络编程是对Socket进行操作。
接下来我用C#语言来进行简单的TCP通信和UDP通信。
一、TCP通信
新建项目SocketTest首先添加TCP通信的客户端代码如下
byte[]data new byte[1024];Socket ClientSocket new Socket(AddressFamily.InterNetwork,SocketType.Stream, ProtocolType.Tcp);Console.WriteLine(Please write Server IPAdress:);string IPAdress Console.ReadLine();Console.WriteLine();Console.Write(Please Write Server Port:);int nPort Convert.ToInt32(Console.ReadLine());IPEndPoint IP new IPEndPoint(IPAddress.Parse(IPAdress),nPort);try{ClientSocket.Connect(IP);}catch (SocketException e){Console.WriteLine(Can Not Connet Server!);Console.WriteLine(e.ToString());return;}int nRetByte ClientSocket.Receive(data);string strData Encoding.ASCII.GetString(data,0, nRetByte);Console.WriteLine(strData);while (true){string strInput Console.ReadLine();if (strInput exit)break;String strSay Client Say:; ClientSocket.Send(Encoding.ASCII.GetBytes(strSay strInput));data new byte[1024];nRetByte ClientSocket.Receive(data);strData Encoding.ASCII.GetString(data, 0, nRetByte);Console.WriteLine(strData);}Console.WriteLine(DisConnect From Server);ClientSocket.Shutdown(SocketShutdown.Both);ClientSocket.Close();客户端套接字通信过程是第一步:调用Socket类创建套接字。第二步调用Connect()函数连接服务器。
TCP通信服务端代码如下 // 返回收到的字节数int nRetByte;byte[] data new byte[1024];// IPEndPoint 将网络终结点表示为IP地址和端口号// IPAddress 提供网络协议IP地址IPEndPoint IPep new IPEndPoint(IPAddress.Any,9050);// 实现 Berkeley套接字接口// AddressFamily:指定Socket类实例可以使用的寻址方案;// InterNetwork:IPV4版本的地址// SocketType:套集字类型;Stream:基于TCP的字节流类型// ProtocolType:协议的类型Socket newSocket new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);// 使Socket与一个本地终结点相连newSocket.Bind(IPep);// 使Socket与处于监听状态newSocket.Listen(10);Console.WriteLine(Wait for a Client);// 为新建连接创建新的SocketSocket ClientSocket newSocket.Accept();// RemoteEndPoint:获取远程终结点IPEndPoint ClientTip (IPEndPoint)ClientSocket.RemoteEndPoint;Console.WriteLine(Connect with Client: ClientTip.Address at Port: ClientTip.Port);string strWelcome Welcome to Server,You Can Send Data To Server;// 获取ASCII字符集的编码// GetBytes将指定字符串中所有的字符编码为一个字节序列data Encoding.ASCII.GetBytes(strWelcome);// 将数据发送到SocketClientSocket.Send(data);while (true){data new byte[1024];// 从绑定的套接字接受数据,将数据存入接受缓冲区nRetByte ClientSocket.Receive(data);Console.WriteLine(Receive Data from Client, Data Size is {0} Bit,nRetByte);if (nRetByte 0)break;Console.WriteLine(Encoding.ASCII.GetString(data,0,nRetByte));string strInput Console.ReadLine();if (strInput exit)break;String strSay Server Say:;ClientSocket.Send(Encoding.ASCII.GetBytes(strSay strInput));Console.WriteLine(strInput);}Console.WriteLine(DisConnect from ClientAddress,ClientTip.Address);ClientSocket.Close();newSocket.Close();TCP通信服务端的通信过程是第一步调用Socket创建套接字。第二步调用Bind()函数将套接字绑定到指定的IP地址和端口号。第三步调用Listen()函数监听套接字。第四步调用Accept()函数等待客户端连接。上述代码执行结果如下 这个测试使用本地回环地址127.0.0.1。
二、UDP通信
UDP通信是面向消息的通信方式。它具有快速不可靠的特点。UDP通信中客户端的过程
第一步创建套接字。第二步调用connect函数连接服务器(这一步是可选的可以写可以不写)。具体代码如下 byte[] data new byte[1024];string strInput, strData;// 定义一个源IP地址// Parse:IP地址字符串转换为IPAdress实例IPEndPoint ClientIP new IPEndPoint(IPAddress.Parse(127.0.0.1),9050);// 定义一个基于UDP协议的SocketSocket ClientSocket new Socket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp);string strWelcome Hello are you Here?;data Encoding.ASCII.GetBytes(strWelcome);// 向服务器发送指定字节的数据ClientSocket.SendTo(data,data.Length, SocketFlags.None,ClientIP);IPEndPoint IPSender new IPEndPoint(IPAddress.Any,0);EndPoint IPRemote (EndPoint)IPSender;data new byte[1024];int nRevByte ClientSocket.ReceiveFrom(data,ref IPRemote);Console.WriteLine(Receive Data From Server:{0}, IPRemote.ToString());Console.WriteLine(Encoding.ASCII.GetString(data,0, nRevByte));while (true){// 从标准输入流中读取下一行字符strInput Console.ReadLine();if(strInputexit)break;// 将从控制台中获取的数据发送到服务器端,并且接收服务器端发回的数据ClientSocket.SendTo(Encoding.ASCII.GetBytes(strInput), IPRemote);data new byte[1024];nRevByte ClientSocket.ReceiveFrom(data, ref IPRemote);strData Encoding.ASCII.GetString(data,0, nRevByte);Console.WriteLine(strData);}Console.WriteLine(StopClient);ClientSocket.Close();UDP通信服务器端通信过程
第一步创建套接字。第二步将套接字绑定到指定IP地址和端口号。第三步接收客户端的数据。具体代码如下
int nRecvByte;byte[] data new byte[1024];// 定义一个网络端点IPEndPoint IPAdress new IPEndPoint(IPAddress.Any,9050);// 定义一个数据报类型的Socket// SocketType.Dgram:使用数据报协议// ProtocolType:UDP协议Socket ClientSocket new Socket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp);// Socket与本地的终端结点绑定ClientSocket.Bind(IPAdress);Console.WriteLine(Wait For a Client!);// 定义一个要发送的IP地址IPEndPoint Sender new IPEndPoint(IPAddress.Any,0);EndPoint IPRemote (IPEndPoint)Sender;// 接受数据报并存储源终结点nRecvByte ClientSocket.ReceiveFrom(data,SocketFlags.None,ref IPRemote);Console.WriteLine(Message Receive From:{0}:, IPRemote.ToString());Console.WriteLine(Encoding.ASCII.GetString(data,0,nRecvByte));string strWelcome Welcome to My Test Server!;data Encoding.ASCII.GetBytes(strWelcome);ClientSocket.SendTo(data,SocketFlags.None,IPRemote);while (true){//接收客户端的数据并且发回 data new byte[1024];nRecvByte ClientSocket.ReceiveFrom(data,ref IPRemote);Console.WriteLine(Encoding.ASCII.GetString(data,0, nRecvByte));ClientSocket.SendTo(data,IPRemote);}UDP通信效果如下 好了今天就介绍到这里。欢迎大家一起交流。源码SocketTest