|
Socket网络通信基础教程
- private void button1_Click(object sender, EventArgs e)
- {
- //Socket
- socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
- string str0 = "Hello Client!";
- byte[] bytes0 = System.Text.Encoding.Default.GetBytes(str0);
- socket.Send(bytes0);
- socket.Blocking = false;
- //Connect
- string host = this.textBox1.Text.ToString();
- int port = int.Parse(this.textBox2.Text.ToString());
- socket.Connect(host, port);
- this.clientText.Text = "客户端地址" + socket.LocalEndPoint.ToString();
- int timesNoMsg = 0;
- if (socket.Available == 0)
- {
- Thread.Sleep(200);
- timesNoMsg++;
- if (timesNoMsg / 10 > timeOut)
- {
- throw new Exception("连接中断");
- }
- }
- else
- {
- timesNoMsg = 0;
- }
- //Send
- string str = "Hello Unity!";
- byte[] bytes = System.Text.Encoding.Default.GetBytes(str);
- socket.Send(bytes);
- bool flag = true;
- //Recv
- while (flag == true)
- {
- int count = socket.Receive(readBuff);
- str = System.Text.Encoding.UTF8.GetString(readBuff, 0, count);
- if(str.Contains("_"))
- {
- }
- this.recvText.Text = str;
- }
- //Close
- socket.Close();
- }
复制代码 服务端接受- private void button1_Click(object sender, EventArgs e)
- {
- connfds = new Dictionary<string, Socket>();
- //方法
- Thread t = new Thread(new ThreadStart(listenProc));
- t.Start();
- }
- private void listenProc()
- {
- string ServerIP = this.textBox1.Text.ToString();
- int ServerPort = Convert.ToInt32(this.textBox2.Text.ToString());
- //新建一个套接字Socket即创建Socket
- Socket listenfd = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
- IPAddress ipAdr = IPAddress.Any;
- IPEndPoint ipEp = new IPEndPoint(ipAdr, ServerPort);//用IPAddress指定的地址和端口号初始化
- listenfd.Bind(ipEp);
- listenfd.Listen(10);
- //Console.WriteLine("[服务器]启动成功");
- while (listening_)
- {
- //Accept
- Socket connfd = listenfd.Accept();
- string connGuid = Guid.NewGuid().ToString("B");
- connfds.Add(connGuid, connfd);
- //Console.WriteLine("[服务器]Accept");
- printmessage(Color.Blue, "[服务器]Accept");
- //Recv
- byte[] readBuff = new byte[1024];
- int count = connfd.Receive(readBuff);
- string str = System.Text.Encoding.UTF8.GetString(readBuff, 0, count);
- //Console.WriteLine("[服务器接收]" + str);
- //Send
- byte[] bytes = System.Text.Encoding.Default.GetBytes("\r\n回传" + str);
- connfd.Send(bytes);
- // 对str操作
- string[] strs = str.Split(new[] { "|" }, StringSplitOptions.RemoveEmptyEntries);
- bytes = System.Text.Encoding.Default.GetBytes("\r\n回传: " + strs[0]);
- // 方法
- new Thread(() => BatchProc(connGuid, strs[0])).Start();
- }
- }
- private void BatchProc(string connGuid, string str)
- {
- //
- // 算法部分
- //
- if (connfds[connGuid] != null && connfds[connGuid].Connected == true)
- {
- connfds[connGuid].Send(System.Text.Encoding.Default.GetBytes("\r\n回传: " + "[图像检测完成]"));
- printmessage(Color.Blue, "[图像检测完成]" + str);
- }
- }
复制代码
参考:
【1】C# Socket网络通信基础教程 https://www.pianshen.com/article/4121438054/
|
|