CS模型的TCP通信分析

文章详细介绍了如何使用TCP协议在服务器端实现数据接收、转换(将客户端发送的数据转为大写)并回传的功能。涉及到的关键函数包括socket(创建套接字)、bind(绑定IP和端口)、listen(设置监听连接数)、accept(接受客户端连接)以及connect(客户端建立连接)。整个流程包括服务器的监听和处理,以及客户端的连接和数据交换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

客户端发送到服务器 服务器将其转换成大写,然后发送给客户端。

其中TCP服务器需要用到的函数:

        socket函数:

                头文件: #include <sys/socket.h>

                int socket(int domain,int type,int protocol);

                作用:创建一个套接字

                domain:AF_INET,AF_INET6,AF_UINX

                type:SOCKET_STREAM,SOCK_DGRAM

                protocol:0

                返回值:

                        成功:新套接字所对应文件描述符

                        失败: -1

        bind函数:

                头文件:#include <arpa/inet.h>

                int bind(int sockfd,const struct sockaddr*addr,socklen_t addrlen);

                作用:给socket绑定一个 地址结构(IP + port)

                sockfd:socket  函数返回值

                        struct sockaddr_in addr;

                        addr.sin_family = AF_INET;

                        addr.sin_port = htons(8888);//端口号

                        addr.sin_addr.s_addr = htonl(INADDR_ANY);服务器随机一个可用ip地址

                addr: 传入参数 (struct sockaddr *)&addr;

                addrlen: sizeof(addr) 地址结构的大小

                返回值:

                        成功:0

                        失败:-1

        listen函数:

                int listen(int sockfd,int backlog);

                作用:设置同时与服务器三次握手的最大数量

                sockfd:socket函数返回值

                backlog:上限数值 最大值128

        accept函数:

                int accept(int sockfd,struct sockaddr *addr,socklen_t*addrlen);

                作用:阻塞等待客户端建立连接,成功的话,返回一个与客户端成功连接的socket文件描述符。

                sockfd: socket 函数返回值

                addr:传出参数。成功与服务器建立连接的那个客户端的地址结构(IP+port)socklen_t clit_addr_len = sizeof(addr);

                addrlen:传入传出。&clit_addr_len入:addr的大小。出:客户端addr实际大小。

                返回值:

                        成功:能与客户端进行数据通信的 socket 对应的文件描述。

                        失败:-1 ,errno

        connect函数:

                int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

                作用:使用现有的socket与服务器建立连接

                sockfd:socket 函数返回值

                struct sockaddr_in srv_addr;//

                        服务器地址结构 srv_addr.sin_family= AF_INET;

                                                  srv_addr.sin_port = 9527  /跟服务器bind时设定的 port 完全一致。

                inet_pton(AF_INET,"服务器的IP地址",&srv_adrr.sin_addr.s_addr);

                addr:传入参数。服务器的地址结构addrlen:服务器的地址结构的大小

                返回值:

                        成功:0

                        失败:-1 errno

                如果不使用bind绑定客户端地址结构,采用"隐式绑定".

其过程大致可包括为:

        server:1.socket()创建socket

                   2.bind()绑定服务器地址结构

                   3.listen()设置监听上限

                   4.accept()阻塞监听客户端连接

                   5.read(fd)读socket获取客户端数据

                   6.小--大写toupper()

                   7.write(fd)

                  8.close();

        client:1.socket()创建socket

                  2.connect();与服务器建立连接

                  3.write()写数据到socket

                  4.read()读转换后的数据。

                  5.显示读取结果

                  6.close()

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值