做个例子证实一下: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();
        
//释放资源
        
    }

}
相关文章
|
11月前
|
缓存 网络协议 Linux
手把手实现tcp/ip用户态协议栈,帮你实践网络知识(网络必备,面试项目)
手把手实现tcp/ip用户态协议栈,帮你实践网络知识(网络必备,面试项目)
|
XML 存储 JSON
【面试题精讲】序列化协议对应于 TCP/IP 4 层模型的哪一层?
【面试题精讲】序列化协议对应于 TCP/IP 4 层模型的哪一层?
|
16天前
|
网络协议 算法 数据格式
【TCP/IP】UDP协议数据格式和报文格式
【TCP/IP】UDP协议数据格式和报文格式
53 3
|
16天前
|
XML JSON 网络协议
【TCP/IP】自定义应用层协议,常见端口号
【TCP/IP】自定义应用层协议,常见端口号
15 3
|
1月前
|
网络协议 网络架构 数据格式
TCP/IP基础:工作原理、协议栈与网络层
TCP/IP(传输控制协议/互联网协议)是互联网通信的基础协议,支持数据传输和网络连接。本文详细阐述了其工作原理、协议栈构成及网络层功能。TCP/IP采用客户端/服务器模型,通过四个层次——应用层、传输层、网络层和数据链路层,确保数据可靠传输。网络层负责IP寻址、路由选择、分片重组及数据包传输,是TCP/IP的核心部分。理解TCP/IP有助于深入掌握互联网底层机制。
246 2
|
5月前
|
网络协议 安全 网络安全
网络 (TCP/IP 四层协议中常见网络协议)
网络 (TCP/IP 四层协议中常见网络协议)
85 7
|
4月前
|
网络协议 网络架构
计算机网络——计算机网络体系结构(1/4)-常见的计算机网络体系结构(OSI体系、TCP/IP体系、原理体系五层协议)
计算机网络——计算机网络体系结构(1/4)-常见的计算机网络体系结构(OSI体系、TCP/IP体系、原理体系五层协议)
102 0
|
5月前
|
网络协议 Java API
深度剖析:Java网络编程中的TCP/IP与HTTP协议实践
【4月更文挑战第17天】Java网络编程重在TCP/IP和HTTP协议的应用。TCP提供可靠数据传输,通过Socket和ServerSocket实现;HTTP用于Web服务,常借助HttpURLConnection或Apache HttpClient。两者结合,构成网络服务基础。Java有多种高级API和框架(如Netty、Spring Boot)简化开发,助力高效、高并发的网络通信。
128 0
|
网络协议 网络架构 数据格式
协议分层与OSI参考模型【图解TCP/IP(笔记三)】
协议分层与OSI参考模型【图解TCP/IP(笔记三)】
145 0
协议分层与OSI参考模型【图解TCP/IP(笔记三)】
|
网络协议
百度搜索:蓝易云【四层协议:TCP/IP详解!】
现了互联网上的可靠数据传输和网络通信。每个层次都有特定的功能和协议,相互配合以实现端到端的通信。
98 0