简单Socket



以下代码来自SIKI学院:
服务器端:
using System;
using System.Net;
namespace tcpconnect
{
             class MainClass
            {
                         public static void Main ( string [] args)
                        {
                                     Socket serverSocket = new Socket ( AddressFamily . InterNetwork , SocketType . Stream , ProtocolType . Tcp );
                                     // 172.18.32.163    172.0.0.1
                                     //绑定IP
                                     //不推荐,注意数字之间为逗号
                                     //IPAddress ipadress = new IPAddress (new byte[]{172,18,32,163});
                                     IPAddress ipadress = IPAddress . Parse ( "172.18.32.163" );
                                     //创建端口号
                                     IPEndPoint ipEndPoint = new IPEndPoint (ipadress, 88 );
                                     //绑定端口号
                                    serverSocket. Bind (ipEndPoint);
                                     //开始监听(对列为50个,参数为0是无数个,考虑性能50个)
                                    serverSocket. Listen ( 50 );
                                     //为当前客户端建立服务器连接
                                     Socket clientSocket = serverSocket. Accept ();
                                     //测试消息
                                     string msg = "hello你好" ;
                                     //中文处理(byte传输)
                                     byte [] data = System.Text. Encoding . UTF8 . GetBytes (msg);
                                     //向客户端发消息
                                    clientSocket. Send (data);
                                     //接收客户端消息
                                     byte [] databuffer = new byte [ 1024 ] ;
                                     //数据byte个数
                                     int count = clientSocket. Receive (databuffer);
                                     //将数据从0到count转为字符串
                                     string msgReceive = System.Text. Encoding . UTF8 . GetString (databuffer, 0 ,count);
                                     //打印
                                     Console . WriteLine (msgReceive);

                                     //关闭与当前客户端的连接
                                    clientSocket. Close ();
                                     //关闭服务器连接
                                    serverSocket. Close ();


客户端:
using System;
using System.Net;
using System.Text;

namespace TCPClient
{
             class MainClass
            {
                         public static void Main ( string [] args)
                        {
                                     //创建一个socket接口
                                     Socket clientSocket = new Socket ( AddressFamily . InterNetwork , SocketType . Stream , ProtocolType . Tcp );
                                     //与服务器进行连接(注意不要写错)
                                    clientSocket. Connect ( new IPEndPoint ( IPAddress . Parse ( "172.18.32.163" ), 88 ));


                                     //创建一个数组用于接收来自服务器的消息
                                     byte [] data = new byte [ 1024 ] ;
                                     //接收来自服务器的消息(接收不到程序会一直停在这里接收,指导接收到为止)
                            int count =    clientSocket. Receive (data);
                                     //字节转字符串
                                     string msg = Encoding . UTF8 . GetString (data, 0 ,count);
                                     Console . WriteLine (msg);

                                     //发送消息(发送则不会停止)
                                     string s = Console . ReadLine ();
                                    clientSocket. Send ( Encoding . UTF8 . GetBytes (s));
                                     //关掉与服务器的连接
                                    clientSocket. Close ();

同步接收:只能一条一条的接收和发送
异步接收:多条连续发送接收
服务器端:

             //异步传输
                         static void StartServerAsync (){
                                     Socket serverSocket = new Socket ( AddressFamily . InterNetwork , SocketType . Stream , ProtocolType . Tcp );
                                     // 172.18.32.163    172.0.0.1
                                     //绑定IP
                                     //不推荐,注意数字之间为逗号
                                     //IPAddress ipadress = new IPAddress (new byte[]{172,18,32,163});
                                     IPAddress ipadress = IPAddress . Parse ( "172.18.32.163" );
                                     //创建端口号
                                     IPEndPoint ipEndPoint = new IPEndPoint (ipadress, 88 );
                                     //绑定端口号
                                    serverSocket. Bind (ipEndPoint);
                                     //开始监听(对列为50个,参数为0是无数个,考虑性能50个)
                                    serverSocket. Listen ( 50 );
                                     Console . WriteLine ( "服务器开启成功!" );

                                     //为当前客户端建立服务器连接
                                     Socket clientSocket = serverSocket. Accept ();
                                     //测试消息
                                     string msg = "hello你好" ;
                                     //中文处理(byte传输)
                                     byte [] data = System.Text. Encoding . UTF8 . GetBytes (msg);
                                     //向客户端发消息
                                    clientSocket. Send (data);

                                     //开始接收消息(异步)
                                     //将接收来的消息从第0位存到1024位,存进databuffer中,并且在接收到每条消息后,用ReceiveCallBack方法进行处理,方法参数为clientSocket
                                    clientSocket. BeginReceive ( databuffer , 0 , 1024 , SocketFlags . None , ReceiveCallBack ,clientSocket);

                                     #region 关掉单条接收功能 并且不关闭服务器端

//                                 //接收客户端消息
//                                 byte[] databuffer = new byte[1024] ;
//                                 //数据byte个数
//                                 int count = clientSocket.Receive(databuffer);
//                                 //将数据从0到count转为字符串
//                                 string msgReceive = System.Text.Encoding.UTF8.GetString(databuffer,0,count);
//                                 //打印
//                                 Console.WriteLine (msgReceive);
//
//                                 //暂停一下
//                                 Console.ReadKey();
//                                 //关闭与当前客户端的连接
//                                 clientSocket.Close();
//                                 //关闭服务器连接
//                                 serverSocket.Close ();

                                     #endregion
                        }

                         //回调函数(自带参数,方法名随便起)
                         static void ReceiveCallBack ( IAsyncResult ar){
                                     Socket clientSocket = ar. AsyncState as Socket ;
                                     //完成数据接收(和BeginReceive对应)
                                     int count = clientSocket. EndReceive (ar);
                                     string msg = Encoding . UTF8 . GetString ( databuffer , 0 ,count);
                                     Console . WriteLine ( "从客户端接收到数据" +msg);
                                     //接收完一条再接收一条
                                    clientSocket. BeginReceive ( databuffer , 0 , 1024 , SocketFlags . None , ReceiveCallBack ,client

Socket);
 客户端:

                                    while (true) {
                                                 //发送消息(发送则不会停止)
                                                 string s = Console . ReadLine ();

                                                clientSocket. Send ( Encoding . UTF8 . GetBytes (s));
                                    }


                        }
            }
}
                        }

接受多个客户端连接
//异步传输
                         static void StartServerAsync (){

                                     //建立服务器
                                     Socket serverSocket = new Socket ( AddressFamily . InterNetwork , SocketType . Stream , ProtocolType . Tcp );
                                     // 172.18.32.163    172.0.0.1
                                     //绑定IP
                                     //不推荐,注意数字之间为逗号
                                     //IPAddress ipadress = new IPAddress (new byte[]{172,18,32,163});
                                     IPAddress ipadress = IPAddress . Parse ( "172.18.32.163" );
                                     //创建端口号
                                     IPEndPoint ipEndPoint = new IPEndPoint (ipadress, 88 );
                                     //绑定端口号
                                    serverSocket. Bind (ipEndPoint);

                                     try {
                                                 //开始监听(对列为50个,参数为0是无数个,考虑性能50个)
                                                serverSocket. Listen ( 50 );
                                                 Console . WriteLine ( "服务器开启成功!" );
                                    }  catch ( Exception ex) {
                                                 Console . WriteLine (ex);
                                    }


                                     //为当前客户端建立服务器连接(当与一个客户端建立连接后,执行AcceptCallBack函数,参数为serverSocket)
                                     //Socket clientSocket = serverSocket.Accept();
                                    serverSocket. BeginAccept ( AcceptCallBack ,serverSocket);


                                     #region 关掉单条接收功能 并且不关闭服务器端

//                                 //接收客户端消息
//                                 byte[] databuffer = new byte[1024] ;
//                                 //数据byte个数
//                                 int count = clientSocket.Receive(databuffer);
//                                 //将数据从0到count转为字符串
//                                 string msgReceive = System.Text.Encoding.UTF8.GetString(databuffer,0,count);
//                                 //打印
//                                 Console.WriteLine (msgReceive);
//
//                                 //暂停一下
//                                 Console.ReadKey();
//                                 //关闭与当前客户端的连接
//                                 clientSocket.Close();
//                                 //关闭服务器连接
//                                 serverSocket.Close ();

                                     #endregion
                        }

                         //回调函数(自带参数,方法名随便起)  IAsyncResult:异步操作接口  AsyncState:异步操作返回的信息
                         static void ReceiveCallBack ( IAsyncResult ar){
                                     //每有一个客户端连接就与它建立一个socket连接
                                     Socket clientSocket = ar. AsyncState as Socket ;
                                     //完成单条数据接收(和BeginReceive对应)
                                     int count = clientSocket. EndReceive (ar);
                                     string msg = Encoding . UTF8 . GetString ( databuffer , 0 ,count);
                                     Console . WriteLine ( "从客户端接收到数据" +msg);
                                     //接收完一条再接收一条
                                    clientSocket. BeginReceive ( databuffer , 0 , 1024 , SocketFlags . None , ReceiveCallBack ,clientSocket);
                        }


                         static void AcceptCallBack ( IAsyncResult ar){
                                     //serverSocket是需要异步操作的对象
                                     Socket serverSocket = ar. AsyncState as Socket ;
                                     //返回一个与客户端的连接
                                     Socket clientSocket = serverSocket. EndAccept (ar);
                                     //测试消息
                                     string msg = "hello你好" ;
                                     //中文处理(byte传输)
                                     byte [] data = System.Text. Encoding . UTF8 . GetBytes (msg);
                                     //向客户端发消息
                                    clientSocket. Send (data);

                                     //开始接收消息(异步)
                                     //将接收来的消息从第0位存到1024位,存进databuffer中,并且在接收到每条消息后,用ReceiveCallBack方法进行处理,方法参数为clientSocket
                                    clientSocket. BeginReceive ( databuffer , 0 , 1024 , SocketFlags . None , ReceiveCallBack ,clientSocket);
                                     //处理完一个客户端再处理另一个客户端
                                    serverSocket. BeginAccept ( AcceptCallBack ,serverSocket);
                        }
            }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值