当前位置: 移动技术网 > IT编程>开发语言>c# > 详解C# Socket简单例子(服务器与客户端通信)

详解C# Socket简单例子(服务器与客户端通信)

2019年07月18日  | 移动技术网IT编程  | 我要评论

这个例子只是简单实现了如何使用 socket 类实现面向连接的通信。

注意:此例子的目的只是为了说明用套接字写程序的大概思路,而不是实际项目中的使用程序。在这个例子中,实际上还有很多问题没有解决,如消息边界问题、端口号是否被占用、消息命令的解析问题等。。

下面是两个程序的代码,(两个程序均为控制台程序)

先发服务端的(server)完整代码如下:

引入命名空间:

using system.net.sockets; 
using systemnet; 
using systemthreading; 

完整代码如下:

namespace socketserver 
{ 
  class program 
  { 
    private static byte[] result = new byte[1024]; 
    private static int myprot = 8885;  //端口 
    static socket serversocket; 
    static void main(string[] args) 
    { 
      //服务器ip地址 
      ipaddress ip = ipaddressparse("1"); 
      serversocket = new socket(addressfamilyinternetwork, sockettypestream, protocoltypetcp); 
      serversocketbind(new ipendpoint(ip, myprot)); //绑定ip地址:端口 
      serversocketlisten(10);  //设定最多10个排队连接请求 
      consolewriteline("启动监听{0}成功", serversocketlocalendpointtostring()); 
      //通过clientsoket发送数据 
      thread mythread = new thread(listenclientconnect); 
      mythreadstart(); 
      consolereadline(); 
    } 
 
    /// <summary> 
    /// 监听客户端连接 
    /// </summary> 
    private static void listenclientconnect() 
    { 
      while (true) 
      { 
        socket clientsocket = serversocketaccept(); 
        clientsocketsend(encodingasciigetbytes("server say hello")); 
        thread receivethread = new thread(receivemessage); 
        receivethreadstart(clientsocket); 
      } 
    } 
 
    /// <summary> 
    /// 接收消息 
    /// </summary> 
    /// <param name="clientsocket"></param> 
    private static void receivemessage(object clientsocket) 
    { 
      socket myclientsocket = (socket)clientsocket; 
      while (true) 
      { 
        try 
        { 
          //通过clientsocket接收数据 
          int receivenumber = myclientsocketreceive(result); 
          consolewriteline("接收客户端{0}消息{1}", myclientsocketremoteendpointtostring(), encodingasciigetstring(result, 0, receivenumber)); 
        } 
        catch(exception ex) 
        { 
          consolewriteline(exmessage); 
          myclientsocketshutdown(socketshutdownboth); 
          myclientsocketclose(); 
          break; 
        } 
      } 
    } 
  } 
} 

以上是服务端(server)的完整代码。

客户端(client)的完整代码如下:

引入命名空间:

using systemnet; 
using systemnetsockets; 
using systemthreading; 

完整代码:

namespace socketclient 
{ 
  class program 
  { 
    private static byte[] result = new byte[1024]; 
    static void main(string[] args) 
    { 
      //设定服务器ip地址 
      ipaddress ip = ipaddressparse("1"); 
      socket clientsocket = new socket(addressfamilyinternetwork, sockettypestream, protocoltypetcp); 
      try 
      { 
        clientsocketconnect(new ipendpoint(ip, 8885)); //配置服务器ip与端口 
        consolewriteline("连接服务器成功"); 
      } 
      catch 
      { 
        consolewriteline("连接服务器失败,请按回车键退出!"); 
        return; 
      } 
      //通过clientsocket接收数据 
      int receivelength = clientsocketreceive(result); 
      consolewriteline("接收服务器消息:{0}",encodingasciigetstring(result,0,receivelength)); 
      //通过 clientsocket 发送数据 
      for (int i = 0; i < 10; i++) 
      { 
        try 
        { 
          threadsleep(1000);  //等待1秒钟 
          string sendmessage = "client send message hellp" + datetimenow; 
          clientsocketsend(encodingasciigetbytes(sendmessage)); 
          consolewriteline("向服务器发送消息:{0}" + sendmessage); 
        } 
        catch 
        { 
          clientsocketshutdown(socketshutdownboth); 
          clientsocketclose(); 
          break; 
        } 
      } 
      consolewriteline("发送完毕,按回车键退出"); 
      consolereadline(); 
    } 
  } 
} 

编译成功后,先运行 服务端(server),再运行客户端(client)即可达到通信效果。

效果如下图:

该程序已在局域网测试通过。(192.168.x.x)

若编译失败,可到下面的地址下载项目文件:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网