zoukankan      html  css  js  c++  java
  • C#socket通信-----多线程

    我在之前的socket通信的基础上做了一点改进,使用多线程来使用,程序更加简洁实用。不足之处请指教哦!

    话不多说,之前的随笔也有介绍,直接上代码啦!

    注意:socket发送接收的都是字节数据

    服务端socket(serverSocket):

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 using System.Net;
     7 using System.Threading;
     8 using System.Net.Sockets;
     9 
    10 namespace serverSocketTest6
    11 {
    12     class Program
    13     {
    14         static Socket serverSocket;
    15         static int port = 2723;
    16 
    17         static void Main(string[] args)
    18         {
    19             Console.WriteLine("服务端:");
    20 
    21             //实例化socket类
    22             serverSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
    23             IPAddress ip = IPAddress.Parse("173.168.5.15");
    24             //标识网络地址
    25             EndPoint point = new IPEndPoint(ip,port);
    26             //绑定IP地址和端口号
    27             serverSocket.Bind(point);
    28 
    29             //开始监听客户端的连接
    30             serverSocket.Listen(10);
    31             Console.WriteLine("等待客户端连接...");
    32 
    33             Thread myThread = new Thread(ListenClientSocket);
    34             myThread.Start();
    35 
    36 
    37             Console.ReadKey();
    38 
    39 
    40 
    41         }
    42 
    43         /// <summary>
    44         /// 监听客户端
    45         /// </summary>
    46         static void ListenClientSocket()
    47         {
    48             while (true)
    49             {
    50                 Socket clientSocket = serverSocket.Accept();//接受客户端的连接
    51                 Console.WriteLine("客户端连接成功");
    52 
    53                 string message = "2017,新的开始,新年快乐!加油!继续努力!!!";
    54                 byte[] data=Encoding.UTF8.GetBytes(message);
    55                 clientSocket.Send(data);
    56 
    57                 Thread receive = new Thread(receiveSocket);//receiveSocket 被传递的方法
    58                 receive.Start(clientSocket); //clientSocket 被传递的参数
    59             }
    60             
    61         }
    62 
    63         /// <summary>
    64         /// 接收来自客户端的消息
    65         /// </summary>
    66         static void receiveSocket(object clientSocket)  //////  这里的参数是线程中的参数,参数类型必须是object类型
    67         {
    68             Socket myClientSocket = (Socket)clientSocket;  //// 将object类型的参数转换成socket类型  使用参数来启动线程,执行后面的代码
    69             while (true)
    70             {
    71                 byte[] data=new byte[1024];
    72                 int length = myClientSocket.Receive(data);
    73                 string message=Encoding.UTF8.GetString(data,0,length);
    74                 Console.WriteLine("接收到来自客户端的消息:"+message);
    75                 
    76 
    77             }
    78         }
    79     }
    80 }

    客户端的代码基本没变~

    客户端socket(clientSocket):

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Net;
    using System.Threading;
    using System.Net.Sockets;
    
    namespace clientSocketTest6
    {
        class Program
        {
            static Socket clientSocket;
            static int port = 2723;
    
            static void Main(string[] args)
            {
                Console.WriteLine("客户端:");
    
                //实力化一个socket类
                clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    
                IPAddress ip = IPAddress.Parse("173.168.5.15");
    
                //客户端请求与服务端的连接
                clientSocket.Connect(ip, port);
                Console.WriteLine("服务器连接成功.");
    
    
                //接受数据
                byte[] data = new byte[1024];
                int length = clientSocket.Receive(data);
                string message = Encoding.UTF8.GetString(data, 0, length);
    
                Console.WriteLine("接受到来自服务端的祝福:" + message);
    
    
                //向服务端发送数居
                for (int i = 0; i < 10; i++)
                {
                    Thread.Sleep(2000);//使该线程暂停(休眠)2s
                    string message2 = "Fighting!!"; //可以写成string message2=Console.ReadLine(); 
                    byte[] data2 = Encoding.UTF8.GetBytes(message2);
                    clientSocket.Send(data2);
                    Console.WriteLine("向服务端发送消息:{0}",message2);
    
                   
                }
                Console.ReadKey();
    
    
            }
        }
    }

     

  • 相关阅读:
    arcengine 文件夹连接
    [WinForm]DataGridView列头右键菜单
    Arcengine编辑代码
    map与pagelayout同步新方法
    清华教授李稻葵:恒昌、宜信过去三四年走过了西方国家20年的历程!
    delete
    股权融资与债务融资之区别 创业者一定要看懂
    《乌镇指数:全球人工智能发展报告2016》正式发布
    2017年美国名校录取中国大陆学生数据汇总
    IDG资本全球拼图:近10年揽26家独角兽,最敢出手VC再造"VC+"
  • 原文地址:https://www.cnblogs.com/jc-1997/p/6240887.html
Copyright © 2011-2022 走看看