zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    【转】PLSQL developer 连接不上64位Oracle 的解决方法
    Cadence 错误合集
    二十三、原理图和PCB交互式布局
    二十二、导入DXF文件
    二十一、打开和关闭飞线
    电源设计基础(罗伯特.A.曼马诺) TI电源书籍
    ORA-01033: ORACLE initialization or shutdown in progress 实用的处理方法
    转载“启动关闭Oracle数据库的多种方法”--来自百度#Oracle
    vue+django+mysql前后端分离的课程管理系统
    webshell扫描器
  • 原文地址:https://www.cnblogs.com/tangdacheng/p/2687549.html
Copyright © 2011-2022 走看看