• Socket 编程


    1、     首先打开VS新建两个控制台应用程序:ConsoleApplication_socketServer和ConsoleApplication_socketClient。

    2、     在ConsoleApplication_socketClient中输入以下代码:

    using System; 

    using System.Collections.Generic; 

    using System.Linq; 

    using System.Text; 

    using System.Net; 

    using System.Net.Sockets;  

    namespace ConsoleApplication_socketClient 

        class Program 

        { 

            static Socket clientSocket;  

            static void Main(string[] args) 

            { 

                //将网络端点表示为IP地址和端口 用于socket侦听时绑定    

                IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("*.*.*.*"), 3001); //填写自己电脑的IP或者其他电脑的IP,如果是其他电脑IP的话需将ConsoleApplication_socketServer工程放在对应的电脑上。  

                clientSocket = new Socket(ipep.AddressFamily,SocketType.Stream,ProtocolType.Tcp);    

                //将Socket连接到服务器    

                try 

                { 

                    clientSocket.Connect(ipep); 

                    String outBufferStr; 

                    Byte[] outBuffer = new Byte[1024]; 

                    Byte[] inBuffer = new Byte[1024]; 

                    while (true) 

                    { 

                        //发送消息   

                        outBufferStr = Console.ReadLine(); 

                        outBuffer = Encoding.ASCII.GetBytes(outBufferStr); 

                        clientSocket.Send(outBuffer, outBuffer.Length, SocketFlags.None); 

                         

                        //接收服务器端信息                

                        clientSocket.Receive(inBuffer, 1024, SocketFlags.None);//如果接收的消息为空 阻塞 当前循环  

                        Console.WriteLine("服务器说:"); 

                        Console.WriteLine(Encoding.ASCII.GetString(inBuffer)); 

                    } 

                } 

                catch 

                { 

                    Console.WriteLine("服务未开启!"); 

                    Console.ReadLine(); 

                } 

            } 

        } 

    3、在ConsoleApplication_socketServer中输入以下代码:

    using System; 

    using System.Collections.Generic; 

    using System.Linq; 

    using System.Text; 

    using System.IO; 

    using System.Net; 

    using System.Net.Sockets; 

    using System.Threading; 

    namespace ConsoleApplication_socketServer 

        class Program 

        { 

            static Socket serverSocket; 

            static Socket clientSocket; 

            static Thread thread; 

            static void Main(string[] args) 

            { 

                IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 3001); 

                serverSocket = new Socket(ipep.AddressFamily, SocketType.Stream, ProtocolType.Tcp); 

                serverSocket.Bind(ipep); 

                serverSocket.Listen(10); 

                while (true) 

                { 

                    clientSocket = serverSocket.Accept(); 

                    thread = new Thread(new ThreadStart(doWork)); 

                    thread.Start(); 

                } 

            } 

            private static void doWork() 

            { 

                Socket s = clientSocket;//客户端信息 

                IPEndPoint ipEndPoint = (IPEndPoint)s.RemoteEndPoint; 

                String address = ipEndPoint.Address.ToString(); 

                String port = ipEndPoint.Port.ToString(); 

                Console.WriteLine(address + ":" + port + " 连接过来了"); 

                Byte[] inBuffer = new Byte[1024]; 

                Byte[] outBuffer = new Byte[1024]; 

                String inBufferStr; 

                String outBufferStr; 

                try 

                { 

                    while (true) 

                    { 

                        s.Receive(inBuffer, 1024, SocketFlags.None);//如果接收的消息为空 阻塞 当前循环  

                        inBufferStr = Encoding.ASCII.GetString(inBuffer); 

                        Console.WriteLine(address + ":" + port + "说:"); 

                        Console.WriteLine(inBufferStr); 

                        outBufferStr = Console.ReadLine(); 

                        outBuffer = Encoding.ASCII.GetBytes(outBufferStr); 

                        s.Send(outBuffer, outBuffer.Length, SocketFlags.None); 

                    } 

                } 

                catch 

                { 

                    Console.WriteLine("客户端已关闭!"); 

                } 

            } 

        } 

    4、先运行ConsoleApplication_socketServer,后运行ConsoleApplication_socketClient就可以通信了。

    5、时间有限,希望大家都以上代码进行优化,因为其中存在不足:比如发言的顺序之类的

    作者 liyongquanlongliang

  • 相关阅读:
    java nb
    hdu5293(2015多校1)--Tree chain problem(树状dp)
    点击交互的四种处理
    Java实现二维码技术探讨。
    折腾开源WRT的AC无线路由之路-1
    C语言及程序设计[套餐]课程主页
    09_Android中ContentProvider和Sqllite混合操作,一个项目调用另外一个项目的ContentProvider
    C语言打印字母金字塔(第一行是A 第二行是ABA ……)
    成员函数的const究竟修饰的是谁
    linux pdb调试总结
  • 原文地址:https://www.cnblogs.com/tangdacheng/p/2687549.html
Copyright © 2020-2023  润新知