Python中萌新请教一个socket问题

python 写了一个简单的服务端和一个客户端,连接可以成功,但是发送数据时,服务端每次都报错“在一个非套接字上尝试了一个操作”,然后停止运行了。
************************
服务端:
import sys
from _thread import *

HOST = ‘’

PORT = 8888

s = socket(AF_INET, SOCK_STREAM)
print(‘Socket created’)

try:
s.bind((HOST, PORT))
print(‘Socket bind complete’)
except socket.error as msg:
print(‘Bind failed. Error Code : ’ + str(msg[0]) + ’ Message ’ + msg[1])
sys.exit()

s.listen(5)
print(‘Socket now listening’)

while True:

conn, addr = s.accept()
print(‘Connected with ’ + addr[0] + ‘:’ + str(addr[1]))

conn.send(b"Welcome to the server.\n")
while True:
data = conn.recv(1024)
reply = b’OK…’ + data
if len(data) == 0:
continue
conn.sendall(reply)
conn.close()
conn.close()


s.close()
********************
客户端:
********************
from socket import *

ip_port = (‘192.168.1.95’, 3600)
BUFSIZE = 1024
sk = socket(AF_INET, SOCK_STREAM)
sk.connect(ip_port)
while True:
msg = input(’>>:’).strip()
if len(msg) == 0: continue
sk.send(msg.encode(‘utf-8’))
feedback = sk.recv(BUFSIZE)
print(feedback.decode(‘utf-8’))
s.close()
Python中萌新请教一个socket问题


9 回复

Traceback <most recent call last>:
File “mysocket.py”, line 27, in <module>
data = conn.recv(1024)
OSError: [WinError 10038] 在一个非套接字上尝试了一个操作


我无法理解你的问题

老铁,你服务器的地址是 HOST = ‘’ , PORT = 8888。而客户端连接的地址是 ip_port= (‘192.168.1.95’, 3600) 。如果是在同一台机器上,你服务器和客户端的 ip/port 都不一样,你确定能通信吗?

不好意思,这里忘记说了,我用了 haproxy 转发。。。

我用了三台电脑,一台跑 server,一台跑 client,一台跑 haproxy

https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001432004374523e495f640612f4b08975398796939ec3c000
上面的代码是网上随便下的,后面看了廖雪峰老师的 socket 代码,成功了,暂时不知道为什么。。。

,我之前整理过关于 socket 的笔记,感兴趣的话可以看看,希望对你有帮助。https://github.com/fangzqq/Learning-Notes/blob/master/network_programming/%E7%90%86%E8%A7%A3%20socket_v2.md#tcp-server-and-client

为什么不直接连 c/s 调试下

第二个 while True 里面,最后你 conn.close() 了,但又没退出循环,于是继续 conn.recv(),所以出错了。

回到顶部