700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > TCP客户端与服务端

TCP客户端与服务端

时间:2020-12-17 06:04:46

相关推荐

TCP客户端与服务端

简介

socket(简称:套接字)是进程之间通信的一个工具,好比现实中的插座,所有的家用电器要想工作都是基于插座进行,进程之间想要进行网络通信需要基于这个socket,负责进程之间的网络数据传输,好比数据的搬运工

一、TCP客户端开发

import socket# 1.创建客户端套接字对象# 参数1:ipv4(ip协议的版本)# 参数2:选择协议(SOCK_STREAM==>TCP协议)tcp_client_socket = socket.socket(socket.AF_INEF, socket.SCOK_STREAM)# 2.和服务端套接字建立连接# 参数:元组(有两个元素!)# 参数1:服务器的ip地址(字符串)# 参数2:服务器的端口号(数字)tcp_client_socket.connect(("127.0.0.1", 8080))# 发送数据的时候需要先转换成二进制data = '123'# 编码data = data.encode("utf8")# 3.发送数据tcp_client_socket.send(data)# 4.接受数据# 参数:以字节为单位的接受的数据的大小recv_data = tcp_client_socket.recv(1024)# 5.关闭客户端套接字tcp_client_socket.close()

二、服务端开发

import socket# 1.创建服务端的套接字对象# 参数1:ipv4# 参数2:tcp协议tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 2.绑定端口号# 参数:元组(两个元素) 参数1:ip地址(字符串) 参数2:端口号(数字)# 参数1不写就是默认本地IP地址(127.0.0.1)tcp_server_socket.bind(("参数1", 8080))# 3.设置监听# 参数:最大监听个数(排队等待处理的最大个数)tcp_server_socket.listen(128)# 4.阻塞等待接受客户端的连接请求# 返回值是一个元组(有两个元素)# 元素1:和客户端进行通信的socket 元素2:客户端的地址信息(ip,端口号)# 通过拆包语法 我们分别获取两个元素(client_socket负责处理客户请求)client_socket, client_addr = tcp_server_socket.accept()# 5.接受数据# 参数:接受数据的大小(字节)client_data = client_socket.recv(1024)# 对二进制的数据解码client_data = client_data.decode()print(client_data)# 6.发送数据send_data = "123".encode()client_socket.send(send_data)# 7.关闭套接字client_socket.close()tcp_server_socket.close()

三、端口复用

# 1.创建服务端套接字对象tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 在创建服务端后面设置端口复用# 端口复用(一旦服务端关闭,端口马上释放)# setsocketopt: 设置socket选项# 参数1:socket选项列表(SOL)# 参数2:地址复用# 参数3:True:开启选项(默认都是不开启)tcp_server_socket.setsocketopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)

四、持续接受数据,判断客户端关闭

(对中间的部分代码进行改变)

while True:# 5.服务端接受数据client_data = client_socket.recv(1024)# 如果接受的数据长度为零,则证明客户端关闭if len(client_data) == 0:print("客户端关闭!")break# 对二进制的数据解码client_data = client_data.encode()print(client_data)# 6.发送数据send_data = "123".encode()client_data.send(send_data)

五、服务端的多任务

import socketimport multiprocessingdef handler_client_request(client_socket):""" 处理客户端请求 """while True:# 接受数据client_data = client_socket.recv(1024)# 如果接受的数据长度为零,则证明客户端关闭if len(client_data) == 0:print("客户端关闭!")break# 对二进制的数据解码client_data = client_data.encode()print(client_data)# 发送数据send_data = "123".encode()client_data.send(send_data)def main():# 1.创建服务端的套接字对象# 参数1:ipv4# 参数2:tcp协议tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 2.绑定端口号# 参数:元组(两个元素) 参数1:ip地址(字符串) 参数2:端口号(数字)# 参数1不写就是默认本地IP地址(127.0.0.1)tcp_server_socket.bind(("参数1", 8080))# 3.设置监听# 参数:最大监听个数(排队等待处理的最大个数)tcp_server_socket.listen(128)while True:# 4.阻塞等待接受客户端的连接请求# 返回值是一个元组(有两个元素)(元素1:和客户端进行通信的socket 元素2:客户端的地址信息(ip,端口号)# 通过拆包语法 我们分别获取两个元素(client_socket负责处理客户请求)client_socket, client_addr = tcp_server_socket.accept()# 创建子进程sub_process = multiprocessing.Process(target=handler_client_request, args=(client_socket,))# 开启子进程sub_process.start()# 关闭客户端套接字client_socket.close()tcp_client_socket.close()if __name__ == '__main__':

六、原理解析图

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。