使用tcp进行字符串网络收发。主要分为两个部分:
1、服务端
step1、创建socket、绑定IP和端口号,开启监听;
step2、等待客户端建立socket连接;
step3、接收的字符串流,显示;也可主动发送数据给客户端;
step4、关闭socket通道、关闭server;
2、客户端
step1、创建基于TCP的socket;
step2、连接的IP地址以及端口;
step3、发送,必须用二进制进行发送消息;
step4、关闭连接;
服务端逻辑,serve.py:
#!/usr/bin/env python
# coding: utf-8
import socket
def main():
# step1、创建socket、绑定IP和端口号,开启监听
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(("127.0.0.1", 8888))
server.listen(5) # 服务端可以接收N个链接,但是只能同一时刻回应五个请求.
# step2、等待客户端建立socket连接
conn, addr = server.accept() # 阻塞(等待客户端的连接)
print("conn & addr:", conn, addr)
# step3、接收的字符串流,显示
from_client_data = conn.recv(1024) # 至多接收1024个字节 阻塞,超过1024分批接收
print("来自客户端的消息: %s" % from_client_data) # 打印客户端发送的内容
# 也可主动发送数据给客户端
conn.send(from_client_data.upper()) # 给客户端发送内容
conn.close() # 关闭socket通道
server.close() # 关闭server
if __name__ == "__main__":
main()
客户端逻辑,client.py:
#!/usr/bin/env python
# coding: utf-8
import socket
def main():
# step1、创建基于TCP的socket
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# step2、连接的IP地址以及端口
client.connect(("127.0.0.1", 8888)) # 必须是元组
# step3、发送,必须用二进制进行发送消息
date = input("请输入:")
client.send(date.encode("utf-8"))
# 接收服务端发送的内容,允许接收服务端至多1024字节
from_server_date = client.recv(1024)
print("来自服务端的消息: %s" % from_server_date)
# step4、关闭连接
client.close()
if __name__ == "__main__":
main()
结果:
python serve.py
python client.py
客户端
请输入:123
来自服务端的消息: b'123'
服务端:
conn & addr: <socket.socket fd=324, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 8888), raddr=('127.0.0.1', 54520)> ('127.0.0.1', 54520)
来自客户端的消息: b'123'