• c#socket同步通信



    再次特别感谢张子阳老师的文章,读后深感益处。


    废话不多说,先贴代码


    这是服务器端代码

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Net;
    using System.Net.Sockets;
    using System.Threading;
    using System.Data.SqlClient;
    namespace SeverConsole {
        class Program {
            const int bufferSize = 8192;//接受的最大字节数
    
            static void Main(string[] args) {
                Console.WriteLine("Sever is runing");
                IPAddress ip = new IPAddress( new byte[]{127,0,0,1});
                TcpListener tcpListener = new TcpListener(ip, 8500);//监听对象
                tcpListener.Start();
    
                while (true) {
                    try{
                    TcpClient remoteClient = tcpListener.AcceptTcpClient();//接受客户端的连接请求,会在此处等待。 不会继虚向下执行 
                    Console.WriteLine(@"有客户端连入,{0}<--{1}", remoteClient.Client.LocalEndPoint, remoteClient.Client.RemoteEndPoint);
    
                    NetworkStream streamFromClient = remoteClient.GetStream();//获取连接到客户端的流
                    byte[] buffer = new byte[bufferSize];
                    int bytesRead = streamFromClient.Read(buffer, 0, bufferSize);//从客户端和服务器获取的流都是二进制形式的
                    Console.WriteLine("read {0} bytes from client", bytesRead);
                    string msg = Encoding.Unicode.GetString(buffer, 0, bytesRead);
                    Console.WriteLine("Received: {0}", msg);
    
                    string magSend = msg.ToUpper();
                    buffer = Encoding.Unicode.GetBytes(magSend);
                    lock (streamFromClient) {//为了保证数据的完整性以及安全性  锁定数据流
                        streamFromClient.Write(buffer, 0, buffer.Length);
                        Console.WriteLine("send: {0}", msg.ToUpper());
                    }
    
                    }catch(Exception ex){
                        Console.WriteLine(ex.Message);
                    }
                    
    
                }
                Console.WriteLine(@"please press 'Q' to exit");
                //Console.ReadLine();
                ConsoleKey key;
                do {
                    key = Console.ReadKey().Key;
                } while (key != ConsoleKey.Q);
            }
        }
    }
    


    这是客户端代码

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Net;
    using System.Net.Sockets;
    namespace clientConsole {
        class Program {
            const int bufferSize = 8192;
            static void Main(string[] args) {
                Console.WriteLine("Client is running!");
    
    
                TcpClient client;
                for (int i = 0; i < 4; i++) {
                     client = new TcpClient();                
                    try {
                        client.Connect("127.0.0.1", 8500);
                    } catch (Exception ex) {
                        Console.WriteLine(ex.Message);
                    }
                    Console.WriteLine("connecting successful");
                    Console.WriteLine("{0}-->{1}", client.Client.LocalEndPoint, client.Client.RemoteEndPoint);
                    string msg = "let me to connect with you ";
                    NetworkStream clientToSever = client.GetStream();
                    byte[] buffer = Encoding.Unicode.GetBytes(msg);
                    clientToSever.Write(buffer, 0, buffer.Length);
                    int t = buffer.Length;
                    Console.WriteLine("Send: {0}", msg);
                    lock (clientToSever) {//
                        int bytesRead = clientToSever.Read(buffer, 0, t);
                        msg = Encoding.Unicode.GetString(buffer, 0, buffer.Length);
                        Console.WriteLine("Received: {0}", msg);
                    }
                }
                ConsoleKey key;
                do {
                    key = Console.ReadKey().Key;
                } while (key != ConsoleKey.Q);
    
    
            }
        }
    }


    转载请说明出处

  • 相关阅读:
    配置别名
    Git永久删除commit--[非教程]
    忽略特殊文件
    自定义Git
    使用GitHub
    模块化开发的几种思想AMD,CMD,commonJS,es6
    angualr设置select默认值
    在vue-cli中引入jquery的坑
    chromedriver@2.33.2 install: `node install.js` vue脚手架安装报错
    vue事件绑定demo
  • 原文地址:https://www.cnblogs.com/likeFlyingFish/p/5345998.html
Copyright © 2020-2023  润新知