本文主要是介绍c#--.net网络通信学习,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、服务端代码
1、创建服务端socket
Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
2、将ipv4地址转换为ipAddress对象,有两种方法:
第一种:IPAddress ipAddress = new IPAddress(new byte[] { 192, 168, 43, 163 });
第二种:IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
3、将ip地址和端口号转换为IPEndPoint对象
IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, 8088);
4、将ipEndPoint绑定到服务端Socket上
serverSocket.Bind(ipEndPoint);
5、进行监听,10表示等待队列中最多容纳10个 请求
serverSocket.Listen(10);
6、进行接收,接收分为两种:同步接收和异步接收
第一种:同步接收(程序运行到这步阻塞)
Socket clientSocket = serverSocket.Accept();
第二种:异步接收(程序不会阻塞)
serverSocket.BeginAccept(AcceptCallBack,serverSocket); //这个函数将serverSocet作为对象传递给过去
AcceptCallBack()是一个函数,注意,这个函数必须将IAsyncResult类型的变量作为参数,否则BeginAccept会报错
static void AcceptCallBack(IAsyncResult ar)
{
Socket serverSocket = ar.AsyncState as Socket; //ar.AsyncState表示ar接收到的socket
Socket clientSocket = serverSocket.EndAccept(ar);
string msg = "hello,你好\n";
byte[] data = System.Text.Encoding.UTF8.GetBytes(msg);
clientSocket.Send(data);
clientSocket.BeginReceive(dataBuffer, 0, 1024, SocketFlags.None, ReceiveCallBack, clientSocket);
serverSocket.BeginAccept(AcceptCallBack, serverSocket); //调用自身,继续接受其他请求
}
static void ReceiveCallBack(IAsyncResult ar)
{
Socket clientSocket = null;
try
{
clientSocket = ar.AsyncState as Socket; //通过ar.AsyncState获取到Socket
int count = clientSocket.EndReceive(ar); //count表示接收了多少字节
if(count == 0) //客户端关闭连接时服务端会无线循环收到0长度的字节,因此当收到0长度的字节时,关闭连接
{
clientSocket.Close();
return;
}
string msg = Encoding.UTF8.GetString(dataBuffer, 0, count);
Console.WriteLine("从客户端接收到数据:" + msg);
clientSocket.BeginReceive(dataBuffer, 0, 1024, SocketFlags.None, ReceiveCallBack, clientSocket); //循环回调
}
catch(Exception e)
{
Console.WriteLine(e);
if (clientSocket != null)
clientSocket.Close();
}
finally
{
}
}
这篇关于c#--.net网络通信学习的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!