tcp/udp建立连接并通信的过程

基于TCP的socket编程的服务器程序流程如下:

1.创建套接字

SOCKETsockSrv = socket(AF_INET, SOCK_STREAM, 0) ;

2.将套接字绑定到本地地址和端口上

SOCKADDR_INaddrSrv ;

addrSrv.sin_addr.S_un.S_addr =htonl(INADDR_ANY) ;                   //把一个u_long类型的值转化为网络字节顺序

addrSrv.sin_family = AF_INET ;

addrSrv.sin_port = htons(6000) ;

bind(sockSrv, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR)) ;              //绑定创建了的套接字

3.将创建的套接字设为监听模式,等待接收客户端的请求

listen(sockSrv,5) ;

4.等待客户请求的到来,当请求到来后,接收连接请求,返回一个新的对于与此次连接的套接字

SOCKETsockConn = accept(sockSrv, (SOCKADDR *)&addrClient, &len) ;

5.用返回的套接字和客户端进行通信

send(sockConn,szSendBuf, lstrlen(szSendBuf) + 1, 0) ;

recv(sockConn, szRecvBuf, 100, 0) ;

6.返回,等待另一个客户的请求

closesocket(sockConn) ;

7.关闭套接字

基于TCP的socket编程的客户端程序流程如下:

1.创建套接字

SOCKETsockClient = socket(AF_INET, SOCK_STREAM, 0) ;

2.向服务器发出连接请求

SOCKADDR_INaddrSrv ;

addrSrv.sin_addr.S_un.S_addr =inet_addr("192.168.0.1") ;

addrSrv.sin_family = AF_INET ;

addrSrv.sin_port = htons(6000) ;

connect(sockClient, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR)) ;

3.和服务器进行通信

recv(sockClient,szRecvBuf, 100, 0) ;

send(...)

4.关闭套接字

基于UDP的socket编程的接收端序流程如下:

1.创建套接字

SOCKETsockSrv = socket(AF_INET, SOCK_DGRAM, 0) ;

2.将套接字绑定到本地地址和端口上

SOCKADDR_INaddrSrv ;

addrSrv.sin_family = AF_INET ;

addrSrv.sin_port = htons(6000) ;

addrSrv.sin_addr.S_un.S_addr =htonl(INADDR_ANY) ;

bind(sockSrv, (SOCKADDR *)&addrSrv,sizeof(SOCKADDR)) ;

3.等待接收数据

SOCKADDR_INaddrClient ;

int len = sizeof(SOCKADDR) ;

TCHAR szRecvBuf[100] ;

recvfrom(sockSrv, szRecvBuf,lstrlen(szRecvBuf) + 1, 0, (SOCKADDR       *)&addrClient,&len) ;

4.关闭套接字

基于UDP的socket编程的客户端序流程如下:

1.创建套接字

SOCKETsockClient = socket(AF_INET, SOCK_DGRAM, 0) ;

2.向服务器发送数据

SOCKADDR_INaddrSrv ;

addrSrv.sin_addr.S_un.S_addr =inet_addr("192.168.0.1") ;

addrSrv.sin_family = AF_INET ;

addrSrv.sin_port = htons(6000) ;

sendto(sockClient,TEXT("Hello"), lstrlen(TEXT("Hello")) + 1, 0, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR)) ;

3.关闭套接字

关于recv、send发送字节数问题:

send((sockConn,szFileBuffer, nLength, 0)函数会发送nLenth个字节,如果nLength大于szFileBuffer的大小,那么多余的字节以\0补充。如果小于szFileBuffer的大小,则会发送szFileBuffer字符串截取nLength个字节。

recv((sockConn,szFileBuffer, nLength, 0)函数原则与上面的一样,只是当nLength大于szFileBuffer的长度时,不会以\0来填充。

同时send,recv函数遇到\0会同样发送和接收。

tcp/udp建立连接并通信的过程

时间: 2024-08-24 20:38:06

tcp/udp建立连接并通信的过程的相关文章

SQL Server 2005 sa登录失败。已成功与服务器建立连接 但是在登录过程中发生错误。 provider 共享内存提供程序 error 0 管道的另一端上无任何进程。

SQL Server 2005 Express版 用户 'sa' 登录失败.该用户与可信 SQL Server 连接无关联.提示错误:已成功与服务器建立连接 但是在登录过程中发生错误. provider 共享内存提供程序 error 0 管道的另一端上无任何进程. 解决方案: 1.首先选中服务器(右键)->属性->安全性->服务器身份验证修改为"SQL SERVER和WINDOWS身份验证模式"2.其次展开服务器下面的"安全性"文件夹->登陆

TCP/UDP网络连接的固定写法

java.net包中定义的两个类Socket(client) ServerSocket(server)建立连接时所需寻址信息为远程计算机的IP地址和端口号(自己指定端口号>1024,小于1024的可能被系统征用)TCP,UDP端口哥含65536个 TCP: Server端与Cilent端同时写,启动时必须先启动Server端 import java.net.*; public class TCPServer{ public static void main(String [] args) thr

TCP协议建立连接与释放连接

TCP建立连接三次握手 1. 客户端发出段1,SYN位表连接请求.序号是1000,这个序号在络通讯中作临时的地 址,每发个数据字节,这个序号要加1,这样在接收端可以根据序号排出数据包的正确顺 序,也可以发现丢包的情况,另外,规定SYN位和FIN位也要占个序号,这次虽然没发数 据,但是由于发了SYN位,因此下次再发送应该序号1001. mss表最段尺,如果 个段太,封装成帧后超过了链路层的最帧长度,就必须在IP 层分,为了避免这种情 况,客户端声明的最段尺,建议服务器端发来的段不要超过这个长度.

TCP/IP建立连接的时候ISN序号分配问题

初始建立TCP连接的时候的系列号(ISN)是随机选择的,那么这个系列号为什么不采用一个固定的值呢?主要有两方面的原因 防止同一个连接的不同实例(different instantiations/incarnations of the same connection)的数据包混淆. 同一个连接的不同实例是怎么回事呢?之前我们说过(源IP.源端口号.目的地址.目的端口号)这个四元组唯一标识一个TCP连接,当一个TCP连接在经历四次挥手关闭时,假如有一个数据包延迟特别大,而这个连接在关闭后又马上以相同

简单使用SOCKET,TCP,UDP模式之间的通信

TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议,由IETF的RFC 793定义.在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,用户数据报协议(UDP)是同一层内[1] 另一个重要的传输协议.在因特网协议族(Internet protocol suite)中,TCP层是位于IP层之上,应用层之下的中间层.不同主机的应用层之间经常需要可靠的.像管道一样的连接,但是IP层不提供这样的流机制,而是提

tcp建立连接过程

TCP协议建立连接的过程:在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接. 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认: 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态: 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户

27.Socket,TCP,UDP,HTTP基本通信原理

Socket,TCP,UDP,HTTP基本通信原理(摘自百度): TCP.UDP,HTTP 底层通信都是通过 socket 套接字实现 网络上不同的计算机,也可以通信,那么就得使用网络套接字(socket). socket就是在不同计算机之间进行通信的一个抽象. 他工作于TCP/IP协议中应用层和传输层之间的一个抽象  如图所示: 1.Socket 是对 TCP/IP 协议族的一种封装,是应用层与TCP/IP协议族通信的中间软件抽象层.从设计模式的角度看来,Socket其实就是一个门面模式,它把

TCP协议详解(TCP建立连接与断开连接)

TCP是面向连接的.可靠的进程到进程通信的协议.它提供的是全双工(双向可传输)的服务,每个TCP都有发送缓存和接受缓存,用来临时存储数据. 1.TCP报文段:TCP把若干个字节构成一个分组,称为报文段(segment).TCP报文段封装在IP数据报中,TCP报文段的首部格式如下图所示: 首部长度为20~60个字节,一下是各个字段的含义:①:源端口号:它是16位字段,为发送发进程对应的端口号:②:目标端口号:它是16位字段,对应的是接收端的进程,接收端收到数据段后,根据这个端口号来确定把数据送给哪

为什么TCP建立连接协议是三次握手,而关闭连接却是四次握手呢?

看到了一道面试题:"为什么TCP建立连接协议是三次握手,而关闭连接却是四次握手呢?为什么不能用两次握手进行连接?",想想最近也到金三银四了,所以就查阅了相关资料,整理出来了这篇文章,希望对你们有所帮助. TCP 连接 我们先来补一下基础什么是 TCP 协议?传输控制协议( Transmission Control Protocol, TCP )是种面向连接.确保数据在端到端间可靠传输的协议.面向连接是插在发送数据前,需要先建立一条虚拟的链路,然后让数据在这条链路上"流动&qu