基于TCP协议的套接字编程
基于socket通信的内部算法,当发送的消息为空的时候,接收端不会收到消息,而发送端向下执行到recv,两端出于僵持状态。
所以在发送端需要有个判断,如果发送的为空,则重新输入发送内容。
socket
socket是应用层与TCP/IP协议通信的中间软件抽象层,它是一组接口。
基于TCP协议的套接字编程(循环)
服务端
import socket
#买手机
phone=socket.socket()
#插入/绑定手机卡
phone.bind(('127.0.0.1',8080))
#开机
phone.listen(5) #半连接池,限制的是请求数
#等待电话连接
print('start....')
while True:
conn,client_addr=phone.accept()
print(conn)
print('已经有一个连接建立成功',client_addr)
while True:
try:
print('服务端正在收数据...')
data=conn.recv(1024)
if len(data)==0:break
print('来自客户端的数据',data)
conn.send(data.upper())
except ConnectionResetError:
break
#挂掉电话连接
conn.close()
#关机
phone.close()
客户端1
import socket
#买手机
phone=socket.socket()
#拨电话
phone.connect(('127.0.0.1',8080))
#通信:发收消息
while True:
msg=input('>>>').strip()
if len(msg)==0:continue
phone.send(msg.encode('utf-8'))
data=phone.recv(1024)
print(data)
#关闭
phone.close()
客户端2
import socket
#买手机
phone=socket.socket()
#拨电话
phone.connect(('127.0.0.1',8080))
#通信:发收消息
while True:
msg=input('>>>').strip()
if len(msg)==0:continue
phone.send(msg.encode('utf-8'))
data=phone.recv(1024)
print(data)
#关闭
phone.close()
注意:必须先启动服务端,开启端口后才能再开启客户端。
在没有并发通信时,客户端1和服务器建立连接,端口被占用,客户端2向服务器发送信息时,服务器收不到信息。只有当客户端1断开后,客户端2才能向服务器发送消息。