这是TCP服务端代码:
import socket
import threading
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('127.0.0.1', 9998))
s.listen(5)
print('Waiting for connection')
def tcplink(sock, addr):
print('Accept new connection from %s:%s...' % addr)
sock.send(b'Welcome!')
buffer = []
while True: #接受数据时就卡在这里了
d = sock.recv(1024)
if not d:
break
else:
buffer.append(d)
sock.send('get it!'.encode('utf-8'))
print((b''.join(buffer)).decode('utf-8'))
sock.close()
print('Connection from %s:%s closed.' % addr)
while True:
sock, addr = s.accept()
t = threading.Thread(target=tcplink, args=(sock, addr))
t.start()
客户端代码:
import socket
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.send(b'nihao')
buffer = []
while True:
d = s.recv(1024)
if not d:
break
else:
buffer.append(d)
data = b''.join(buffer)
s.close()
print(data.decode('utf-8'))
上网查了很多方式比如settimeout,MSG_DONTWAIT,都失败了,如何修改代码才能正常接受数据呢?求详细一点的说明,谢谢!
我翻到一个写好的代码 你客户端 没有连接
服务端 :
import socket
import time
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind(("localhost",5555))
s.listen(5)#最大连接5 监听
print("服务器已经运行。。。")
def tcp(sock,addr):
print("接受新的连接请求:",addr)
while True:
data = sock.recv(1024)
time.sleep(1)
if not data or data.decode()=="quit":
break
sock.send(data.decode("utf-8").upper().encode())
sock.close()
print("关闭%s的连接" % addr)
while True:
sock,addr = s.accept()#等待接受
tcp(sock,addr)
#这里是等待下一个连接
客户端:
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("localhost",5555))
while True:
data = input("输入你要发送的数据:")
s.send(data.encode())
if data=="quit":
break
print(s.recv(1024).decode("utf-8"))
s.close()