基于TCP Socket的简单网络通信

本实例是一个基于TCP的简单通讯实例,分为服务器端和客户端,服务器端监听客户端的连接请求,客户端将信息发送给服务器端,而服务器端则回复客户端发送的信息以达到通讯测试:

服务器端代码如下:

using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Text;
using  System.Net;
using  System.Net.Sockets;

namespace  SimpleTcpServer
{
    
class  Program
    {
        
static  void  Main( string [] args)
        {
            
// 接收到的数据
             int  receive;
            
// 定义数据缓冲区
             byte  [] date = new  byte [ 1024 ];
            
// 设置终端连接,接收任意请求的IP地址客户终端
            IPEndPoint MyIpEndpoint  =  new  IPEndPoint(IPAddress.Any,  13000 );
            
// 新建一个服务器套接字
            Socket MySocket  =  new  Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            
// 绑定服务端套接字
            MySocket.Bind(MyIpEndpoint);
            
// 监听
            MySocket.Listen( 10 );
            Console.WriteLine(
" Waitting for a message from client! " );

            
// 获取客户端套接字
            Socket Client  =  MySocket.Accept();
            
// 获取客户端终点
            IPEndPoint ClientEndPoint  = (IPEndPoint)Client.RemoteEndPoint;
            Console.WriteLine(
" Connect with {0} port {1} " ,ClientEndPoint.Address,ClientEndPoint.Port.ToString());

            
// 将要发送到客户端的信息进行编码
            date  =  Encoding.ASCII.GetBytes( " Welcome to my Server " );
            
// 发送信息到客户端
            Client.Send(date, date.Length, SocketFlags.None);

            
// 如果接收的信息长度为0,则自动退出循环
             while  ( true )
            {
                receive 
=  Client.Receive(date);
                
if  (receive == 0 )
                {
                    
break ;
                }
                
// 接收到的字符
                 string  ReceiveString  =  Encoding.UTF8.GetString(date,  0 , receive);
                Console.WriteLine(ReceiveString);
                
// 发送信息到客户端
                Client.Send(date, receive, SocketFlags.None);
            }
            Console.WriteLine(
" DisConnected with {0} " , ClientEndPoint.Address);
            Client.Close();
            MySocket.Close();
        }
    }
}

 

客户端代码如下:

 

using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Text;
using  System.Net;
using  System.Net.Sockets;

namespace  SimpleTcpClient
{
    
class  Program
    {
        
static  void  Main( string [] args)
        {
            
// 缓冲区大小
             byte [] data = new  byte [ 1024 ];
            
string  Input, StringData;
            
int  receive;
            
// 设置连接终端
            IPEndPoint MyIpEndpoint  =  new  IPEndPoint(IPAddress.Parse( " 127.0.0.1 " ),  13000 );
            
// 设置连接服务器的套接字
            Socket MyServer = new  Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
            
try
            {
                
// 连接服务器
                MyServer.Connect(MyIpEndpoint);
            }
            
catch
            {
                Console.WriteLine(
" Fail to connect to the server! " );
                
return ;
            }
            
// 接收服务器端发来的信息
            receive  =  MyServer.Receive(data);
            
// 将发来的信息进行转码
            StringData  =  Encoding.UTF8.GetString(data,  0 , receive);
            Console.WriteLine(StringData);

            
while  ( true )
            {
                
// 从客户端输入信息
                Input  =  Console.ReadLine();
                
if  (Input == " exit " )
                {
                    
break ;
                }
                
// 发送信息到服务端
                MyServer.Send(Encoding.UTF8.GetBytes(Input));
                
// 接收服务端的信息
                receive  =  MyServer.Receive(data);
                StringData 
=  Encoding.UTF8.GetString(data,  0 , receive);
                Console.WriteLine(
" Server: {0} " , StringData);
            }
            
// 释放资源
            Console.WriteLine( " Disneccted from Server! " );
            MyServer.Shutdown(SocketShutdown.Both);
            MyServer.Close();
        }
    }
}

 

本实例是基于TCP协议的同步网络通讯,后面我们将继续学习基于TCP协议的异步网络通讯。同步网络通讯的优点是简单和易于理解,在通讯量不大的情况下,同步通讯的效率要高于异步通讯,但是同步通讯的缺点也是显而易见的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值