tcp 发表于 2017-12-12 | 分类于 python | tcp12import socketserver_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 服务端12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849# 绑定IP地址和端口address = ("", 8000)server_sock.bind(address)# 让服务端的socket开启监听,等待客户端的连接请求# listen中的参数表示已经建立链接和半链接的总数# 如果当前已建立链接数和半链接数已达到设定值,那么新客户端不会立即connect成功,而是等待服务器能够处理时server_sock.listen(128)# 为了解决服务器socket可能的2MSL延迟问题,我们可以为服务器socket设置SO_REUSEADDR选项'''# 使用setsockopt()方法设置socket的选项参数# SOL_SOCKET = Set Option Level _ SOCKET 设置选项级别为socket级# SO_REUSEADDR = Socket Option _ REUSEADDR 设置socket的选项参数为重用地址功能# 1 表示开启此选项功能,即开启重用地址功能server_sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)server_sock.set'''# 使用accept方法接收客户端的连接请求# 如果有新的客户端来连接服务器,那么就产生一个新的套接字专门为这个客户端服务# client_sock用来为这个客户端服务,与客户端形成一对一的连接# 而server_sock就可以省下来专门等待其他新客户端的连接请求# client_addr是请求连接的客户端的地址信息,为元祖,包含用户的IP和端口client_sock, client_addr = server_sock.accept()# recv()方法可以接收客户端发送过来的数据,指明最大收取1024个字节的数据recv_data = client_sock.recv(1024)# python3中收到的数据为bytes类型# recv_data.decode()将bytes类型转为str类型# send()方法向客户端发送数据,要求发送bytes类型的数据client_sock.send("thank you!\n".encode())# 关闭与客户端连接的socketclient_sock.close()# 关闭服务端的监听socketserver_sock.close() 客户端123456789101112131415161718192021import socket# 创建客户端socket用以跟服务器连接通信# tcp协议对应为SOCK_STREAMclient_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# connect方法用来连接服务器server_addr = ("127.0.0.1", 8000)client_sock.connect(server_addr)# 提示用户输入要发送的数据msg = input("请输入要发送的内容:")# send()方法想服务器发送数据client_sock.send(msg.encode())# recv()接收对方发送过来的数据,最大接收1024个字节recv_data = client_sock.recv(1024)print("收到了服务器的回应信息:%s" % recv_data.decode())# 关闭客户端套接字client_sock.close() -------------end-------------