TCP实现多个客户端与服务端 数据 传输

来源:互联网 发布:工业三维建模软件 编辑:程序博客网 时间:2024/05/22 01:51

实现一个客户端和一个服务端通信
可以同时收发多条信息
使用C#语言,通过socket进行通信,基于TCP协议
服务端代码:

<code class="hljs cs has-numbering"><span class="hljs-keyword">using</span> System;<span class="hljs-keyword">using</span> System.Collections.Generic;<span class="hljs-keyword">using</span> System.Linq;<span class="hljs-keyword">using</span> System.Text;<span class="hljs-keyword">using</span> System.Threading.Tasks;<span class="hljs-keyword">using</span> System.Net;<span class="hljs-keyword">using</span> System.Net.Sockets;<span class="hljs-keyword">using</span> System.Threading;namespace testServer{    class Program    {        <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> Main(<span class="hljs-keyword">string</span>[] args)        {            Socket server = <span class="hljs-keyword">new</span> Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);<span class="hljs-comment">//创建服务端</span>            EndPoint point = <span class="hljs-keyword">new</span> IPEndPoint(IPAddress.Parse(<span class="hljs-string">"169.254.202.67"</span>), <span class="hljs-number">6000</span>);            server.Bind(point);<span class="hljs-comment">//绑定端口号和IP</span>            server.Listen(<span class="hljs-number">10</span>);<span class="hljs-comment">//开启监听</span>            Console.WriteLine(<span class="hljs-string">"服务器开启。。。。"</span>);            Socket client = server.Accept();<span class="hljs-comment">//保存连接进来的客户端</span>            client.Send(Encoding.UTF8.GetBytes(<span class="hljs-string">"你已经进入服务"</span>));<span class="hljs-comment">//给客户端发送消息,提示客户端连接成功</span>            Thread t1 = <span class="hljs-keyword">new</span> Thread(reciveMsg);            t1.Start(client);<span class="hljs-comment">//开启线程接收消息</span>            Thread t2 = <span class="hljs-keyword">new</span> Thread(sendMsg);            t2.Start(client);<span class="hljs-comment">//开启线程发送消息</span>        }        <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> reciveMsg(<span class="hljs-keyword">object</span> obj)        {            Socket client = obj <span class="hljs-keyword">as</span> Socket;            <span class="hljs-keyword">while</span> (<span class="hljs-keyword">true</span>)            {                <span class="hljs-keyword">byte</span>[] buffer = <span class="hljs-keyword">new</span> <span class="hljs-keyword">byte</span>[<span class="hljs-number">1024</span>];                <span class="hljs-keyword">try</span>                {                    <span class="hljs-keyword">int</span> length = client.Receive(buffer);                    <span class="hljs-keyword">string</span> res = Encoding.UTF8.GetString(buffer, <span class="hljs-number">0</span>, length);                    Console.WriteLine(<span class="hljs-string">"接收到的消息:"</span> + res);                }                <span class="hljs-keyword">catch</span> (Exception e)                {                    IPEndPoint point = client.RemoteEndPoint <span class="hljs-keyword">as</span> IPEndPoint;                    Console.WriteLine(point.ToString()+<span class="hljs-string">"断开连接。。。"</span>);                    <span class="hljs-keyword">break</span>;                }            }        }        <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> sendMsg(<span class="hljs-keyword">object</span> obj)        {            Socket client = obj <span class="hljs-keyword">as</span> Socket;            <span class="hljs-keyword">while</span> (<span class="hljs-keyword">true</span>)            {                <span class="hljs-keyword">string</span> s = Console.ReadLine();                client.Send(Encoding.UTF8.GetBytes(s));            }        }    }}</code>

服务端代码

<code class="hljs vala has-numbering"><span class="hljs-keyword">using</span> System;<span class="hljs-keyword">using</span> System.Collections.Generic;<span class="hljs-keyword">using</span> System.Linq;<span class="hljs-keyword">using</span> System.Text;<span class="hljs-keyword">using</span> System.Threading.Tasks;<span class="hljs-keyword">using</span> System.Net;<span class="hljs-keyword">using</span> System.Net.Sockets;<span class="hljs-keyword">using</span> System.Threading;<span class="hljs-class"><span class="hljs-keyword">namespace</span> <span class="hljs-title">testClient</span>{</span>    <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Program</span>    {</span>       <span class="hljs-keyword">static</span> Socket client;       <span class="hljs-keyword">static</span> Thread t1;       <span class="hljs-keyword">static</span> Thread t2;       <span class="hljs-keyword">static</span> <span class="hljs-keyword">bool</span> isLife = <span class="hljs-literal">false</span>;<span class="hljs-comment">//标记是否连接到服务器</span>        <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> Main(<span class="hljs-keyword">string</span>[] args)        {             client = <span class="hljs-keyword">new</span> Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);<span class="hljs-comment">//创建客户端</span>            client.Connect(<span class="hljs-keyword">new</span> IPEndPoint(IPAddress.Parse(<span class="hljs-string">"169.254.202.67"</span>), <span class="hljs-number">6000</span>));<span class="hljs-comment">//将客户端连接到服务器</span>            isLife = <span class="hljs-literal">true</span>;             t1 = <span class="hljs-keyword">new</span> Thread(reciveMsg);            t1.Start();<span class="hljs-comment">//开启线程接收消息</span>             t2 = <span class="hljs-keyword">new</span> Thread(sendMsg);            t2.Start();<span class="hljs-comment">//开启线程发送消息</span>            <span class="hljs-comment">//Console.ReadKey();</span>        }        <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> reciveMsg()        {            <span class="hljs-keyword">while</span> (isLife)            {                byte[] buffer = <span class="hljs-keyword">new</span> byte[<span class="hljs-number">1024</span>];                <span class="hljs-keyword">try</span>{                    <span class="hljs-keyword">int</span> length = client.Receive(buffer);                    <span class="hljs-keyword">string</span> res = Encoding.UTF8.GetString(buffer, <span class="hljs-number">0</span>, length);                    Console.WriteLine(<span class="hljs-string">"接收到的消息:"</span> + res);                }<span class="hljs-keyword">catch</span>(Exception e){                    Console.WriteLine(<span class="hljs-string">"reciveMsg:  End"</span>);                    <span class="hljs-keyword">break</span>;                }            }        }        <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> sendMsg() {            <span class="hljs-keyword">while</span> (isLife)            {                <span class="hljs-keyword">string</span> s = Console.ReadLine();                <span class="hljs-keyword">try</span> {                    client.Send(Encoding.UTF8.GetBytes(s));                }<span class="hljs-keyword">catch</span> (Exception e){                    Console.WriteLine(<span class="hljs-string">"sendMsg:  End"</span>);                    <span class="hljs-keyword">break</span>;                }                if(s.Equals(<span class="hljs-string">"886"</span>)){                    isLife = <span class="hljs-literal">false</span>;                    client.Close();                }            }        }    }}</code>

效果图:
这里写图片描述
资源下载:
http://download.csdn.net/detail/u011484013/9487030

0 0