做个例子证实一下:tcp协议

简介: 面像连接地例子 使用同步套接字,一个server对应于一个client 同步套接字的解释:    在通过Socket进行连接、接收、发送操作时,客户机或服务器会暂停当前工作,处于等待状态,即一直等到有数据时才继续执行下面的语句。一般在阻塞方式下使用这种方式。可见,同步套接字适用于网络传输量不太大的情况。当网络传输量很大时,长时间的等待可能会让用户无法忍受。 在这个例子中,使用byte数组做

面像连接地例子 使用同步套接字,一个server对应于一个client

同步套接字的解释:
    在通过Socket进行连接、接收、发送操作时,客户机或服务器会暂停当前工作,处于等待状态,即一直等到有数据时才继续执行下面的语句。一般在阻塞方式下使用这种方式。可见,同步套接字适用于网络传输量不太大的情况。当网络传输量很大时,长时间的等待可能会让用户无法忍受。

在这个例子中,使用byte数组做为数据发送或者接收的缓冲区,当服务器通过TCP协议收到的数据后,数据存在系统内的TCP缓冲区内,当调用Receive()方法时,这个方法尝试从TCP的缓冲区中去除一定数量的数据,数量受以下两个因素的影响
第一:程序中指定的byte数组的长度
第二:Receive()方法中指定的size参数

第一种情况, 不指定size参数

 

m_clientSocket.Send(Encoding.UTF8.GetBytes(t_input));
data
= new   byte [ 1024 ];
m_recv
= m_clientSocket.Receive(data);
System.Console.WriteLine(m_recv.ToString());
// 如果TCP缓冲区中的数据少于1024那么,返回的数值,就是TCP缓冲区的所有内容的byte数
string  t_serversend = Encoding.UTF8.GetString(data, 0 ,data.Length);
Console.WriteLine(t_serversend);

 

使用这种方法接收数据,并没有指定size的大小,size 默认的情况下,为数据的长度,如果TCP的缓冲区的数据量少于1024,那么,他就会把TCP缓冲区的数据全部取出,并返回实际读取的字节数给m_recv

如下所示


Welcome to my test server
test
testome to my test server
a bad test
a bad test my test server
exit

 

客户端代码

 

public   class  cxyTcpClien
{
    [STAThread]
    
public static void Main()
    
{
        IPEndPoint m_endpoint
=new IPEndPoint(IPAddress.Parse("127.0.0.1"),1234);
        Socket m_clientSocket
=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
        
try
        
{
            m_clientSocket.Connect(m_endpoint);
        }

        
catch(Exception ex)
        
{
            Console.WriteLine(
"不能连接到主机");
            
return ;
        }


        
byte[] data=new byte[1024];
        
int m_recv=m_clientSocket.Receive(data);
        
string m_getdata=Encoding.UTF8.GetString(data,0,m_recv);
        Console.WriteLine(m_getdata);

        
while(true)
        
{
            
string t_input=Console.ReadLine();
            
if(t_input=="exit")
                
break;
            m_clientSocket.Send(Encoding.UTF8.GetBytes(t_input));
            data
=new byte[1024];
            m_recv
=m_clientSocket.Receive(data);
            System.Console.WriteLine(m_recv.ToString());
//如果TCP缓冲区中的数据少于1024那么,返回的数值,就是TCP缓冲区的所有内容的byte数
            string t_serversend=Encoding.UTF8.GetString(data,0,m_recv);
            Console.WriteLine(t_serversend);

        }


        Console.WriteLine(
"准备从服务器断开");
        m_clientSocket.Shutdown(SocketShutdown.Both);
        m_clientSocket.Close();

        
    }

}

服务器端代码

 

{
    [STAThread]
    
public static void Main()
    
{
        IPAddress m_ip
=IPAddress.Parse("127.0.0.1");
        IPEndPoint m_ipend
=new IPEndPoint(m_ip,1234);
        Socket m_server
=new Socket(AddressFamily.InterNetwork,
            SocketType.Stream,ProtocolType.Tcp);
        m_server.Bind(m_ipend);
        m_server.Listen(
10);
        Console.WriteLine(
"正在等待客户端的连接");
        Socket m_client
=m_server.Accept();

        
string m_welcome="欢迎来到我的服务器";

        
byte[] data=new byte[1024];
        data
=Encoding.UTF8.GetBytes(m_welcome);
        m_client.Send(data,
0,data.Length,SocketFlags.None);

        IPEndPoint m_newclient
=m_client.RemoteEndPoint as IPEndPoint;
        
if(m_newclient!=null)
            Console.WriteLine(
"连接的客户端IP是{0},端口是{1}",m_newclient.Address,m_newclient.Port);
        
        
int recv;
        
for(int i=0;i<5;i++)
        
{
            recv
=m_client.Receive(data);
            Console.WriteLine(Encoding.UTF8.GetString(data,
0,recv));
            m_client.Send(data);
        }


        Console.WriteLine(
"从服务器断开{0}",m_newclient.Address);
        m_client.Close();
        m_server.Close();
        
//释放资源
        
    }

}
相关文章
|
缓存 网络协议 Linux
手把手实现tcp/ip用户态协议栈,帮你实践网络知识(网络必备,面试项目)
手把手实现tcp/ip用户态协议栈,帮你实践网络知识(网络必备,面试项目)
|
XML 存储 JSON
【面试题精讲】序列化协议对应于 TCP/IP 4 层模型的哪一层?
【面试题精讲】序列化协议对应于 TCP/IP 4 层模型的哪一层?
|
10月前
|
网络协议
TCP/IP与OPC协议的深度比较
总的来说,TCP/IP和OPC协议各有其优点和应用场景。TCP/IP协议是网络通信的基础,而OPC协议则是工业自动化领域的重要工具。在实际应用中,我们需要根据具体的需求和场景,选择合适的协议。
394 11
|
网络协议 安全 Go
Go语言进行网络编程可以通过**使用TCP/IP协议栈、并发模型、HTTP协议等**方式
【10月更文挑战第28天】Go语言进行网络编程可以通过**使用TCP/IP协议栈、并发模型、HTTP协议等**方式
293 13
|
网络协议 网络安全 网络虚拟化
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算。通过这些术语的详细解释,帮助读者更好地理解和应用网络技术,应对数字化时代的挑战和机遇。
1316 3
|
网络协议 算法 网络性能优化
计算机网络常见面试题(一):TCP/IP五层模型、TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议
计算机网络常见面试题(一):TCP/IP五层模型、应用层常见的协议、TCP与UDP的区别,TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议、ARP协议
|
XML JSON 网络协议
【TCP/IP】自定义应用层协议,常见端口号
【TCP/IP】自定义应用层协议,常见端口号
513 3
|
网络协议 网络架构 数据格式
协议分层与OSI参考模型【图解TCP/IP(笔记三)】
协议分层与OSI参考模型【图解TCP/IP(笔记三)】
436 0
协议分层与OSI参考模型【图解TCP/IP(笔记三)】
|
网络协议 算法 数据格式
【TCP/IP】UDP协议数据格式和报文格式
【TCP/IP】UDP协议数据格式和报文格式
1448 3
|
网络协议 网络架构 数据格式
TCP/IP基础:工作原理、协议栈与网络层
TCP/IP(传输控制协议/互联网协议)是互联网通信的基础协议,支持数据传输和网络连接。本文详细阐述了其工作原理、协议栈构成及网络层功能。TCP/IP采用客户端/服务器模型,通过四个层次——应用层、传输层、网络层和数据链路层,确保数据可靠传输。网络层负责IP寻址、路由选择、分片重组及数据包传输,是TCP/IP的核心部分。理解TCP/IP有助于深入掌握互联网底层机制。
1967 2

热门文章

最新文章