winform socket基于TCP的服务器与客户端通讯

前言:我所写的文章大部分为自己理解之后的想法,若有任何不正确的地方请多多包含并在评论区给与指正,编程从来不应该是一个人的战斗!!!

1.我的目标:局域网聊天通讯软件[Winform]

基于这个目标和某位大佬的意见我基本可以分为两种TCP和HTTP

我选择了TCP

2.方法:Socket

 

 

 这个就是整体说明图

服务器端:

// 定义一个套接字用于监听客户端发来的消息,包含三个参数(ipv4寻址协议,流式连接,tcp协议)

Socket socket_TCP = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

//绑定监听端口

IPEndPoint iPEndPoint = new IPEndPoint(IPAddress.Parse(textBox_IP.Text), (int)numericUpDown_Port.Value);

socket_TCP.Bind(iPEndPoint);

//设置监听队列

socket_TCP.Listen(0);

//等待客户端连接

socket_TCP.Accept();

客户端:

// 定义一个套接字用于监听客户端发来的消息,包含三个参数(ipv4寻址协议,流式连接,tcp协议)

Socket socket_TCP = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

//

IPEndPoint iPEndPoint = new IPEndPoint(IPAddress.Parse(textBox_IP.Text), (int)numericUpDown_Port.Value);

Socket_TCP.Connect(iPEndPoint);

然后就是打开两个软件了

连接成功了 但是服务器端接收客户端连接会锁死 所以加一个线程单独来做连接

Thread thread_Listen = new Thread(TCP_Listen);
thread_Listen.Start();

连接可以是多次的所以服务器应循环等待连接操作保证每次都可以连接

private void TCP_Listen()
{
  while (true)
  {

    socket_TCP.Accept();

  }

}

连接完成接下来就是

服务器发送数据给客户端 

客户端接收发送来得数据

客户端发送数据给服务器

服务器接收发送来得数据

就可以了

两个都是Socket发送和接收都是公用的

//发送:

private void button_Send_Click(object sender, EventArgs e)
{
Socket_TCP.Send(Encoding.UTF8.GetBytes(textBox_Send.Text.Trim()));
textBox_Send.Clear();
}

//接收:

private void TCP_Read()
{
while (true)
{

byte[] buffer_Data = new byte[1024 * 1024];

Socket_TCP.Receive(buffer_Data);

}

}

完成了,细节部分就不予多说了

源码地址:

链接:https://pan.baidu.com/s/1Z8x59WaR7GVP-STTM-aj3Q
提取码:ea5l

持续更新2020-07-1419:22:49

posted @ 2020-07-14 18:04  葬歌倾城  阅读(156)  评论(0)    收藏  举报