Socket学习

服务器端代码:(ctrl + shift + space  重载   ctrl + k+ s 外侧代码)

//第一个参数寻址方式  第二个参数是数据传输方式   第三个是传输协议

Socket socket = new Socket(AddressFaimly.InterNetwork,SocketType.Stream, ProtocoType.Tcp);

//绑定端口和IP

socket.Bind(new IPEndpoint(ipstring,portNum));

//侦听

socket.Listen(10);

//线程池创建线程:由于socket.Accept会阻塞主线程,所以开启一个新线程

ThreadPool.QueueuerworkItem(p=>{

Socket serversocket = (Socket) p;

while(true)

{

//接受客户端连接,返回客户端通讯socket

Socket proxSocket = socket.Accept();

  WriteText("有客户端连接",proxsocket.RemoteEndpoint.Tostring());

  Task task = new Task(s=>{

  //客户端通讯socket

  Socket pSocket = (socket)s;

    while(true)

    {

     try

      {

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

      int realLen = pSocket.Receive(buffer);

      //客户端正常退出,返回一个空字节

      if(realLen<=0)

      {

        if(pSocket != null && pSocket.connected)

        {

          WriteText("客户端退出",psocket.RemoteEndpoint.Tostring());

          pSocke.shutdown(socketshutdown.Both);

          pSocket.close();

          return;

        }

      }

      string  strmsg = Encoding.Default.Getstring(buffer,0,realLen);

      

      WriteText(strmsg,proxsocket.RemoteEndpoint.Tostring());

      }

      catch(Exception e)

      {  

        if(psocket != null && psocket.connected)

        {  

          WriteText("客户端异常",psocket.RemoteEndpoint.Tostring());

          psocket.shutdown(socketshutdown.both);

          pSocket.close();

          return;

        }

      }

    }

  },proxSocket);

thread.isbackground = true;

task.Start();

}

},socket );

public void WriteText(string text ,string form)

{

if(txtLog.InvokeRequired)

{

//跨线程调用控件

txtLot.Invoke(new Action(()=>{

this.txtLog.Text = string.Format("当前一个客户连接上{0}\r\n",text,from ,this.txtLog.Text);

}));

}

else

this.txtLog.Text = string.Format("当前一个客户连接上{0}\r\n",text,from ,this.txtLog.Text);

 

 

 

 

客户端:

public socket currentSocket{set;get;};

try

 {

   

//第一个参数寻址方式  第二个参数是数据传输方式   第三个是传输协议

Socket socket = new Socket(AddressFaimly.InterNetwork,SocketType.Stream, ProtocoType.Tcp);

//绑定端口和IP

socket.Connect(IPstring,portNum);

currentSocket = socket;

//socket.send(10);

//线程池创建线程:由于socket.Accept会阻塞主线程,所以开启一个新线程

ThreadPool.QueueuerworkItem(p=>{

Socket serversocket = (Socket) p;

  //Task.Factory.Startnew();

  Thread thread = new Thread(()=>{

    while(true)

    {

      try

      {

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

      int realLen = pSocket.Receive(buffer);

      if(realLen<=0)

      {

        if(pSocket != null && pSocket.connected)

        {

          WriteText("客户端退出",psocket.RemoteEndpoint.Tostring());

          pSocke.shutdown(socketshutdown.Both);

          pSocket.close();

          return;

        }

      }

      string  strmsg = Encoding.Default.Getstring(buffer,0,realLen);

      

      WriteText(strmsg,proxsocket.RemoteEndpoint.Tostring());

     }

      }

    catch

    {}

 

});

  thread.isbackground = true;

  thread.start();

 }

 catch(Exception e)

 {  

  }

     

posted @ 2019-03-24 22:16  LisonWu  阅读(210)  评论(0编辑  收藏  举报