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问题
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(),所以出错了。

