python中套接字的问题(有示例)

Dic4000 2010-11-08 04:24:15
python版本:3.1

服务器端:

#coding:utf-8

from socket import *
from time import ctime

HOST=""
PORT=21567
BUFSIZ=1024
ADDR=(HOST,PORT)

tcpSerSock=socket(AF_INET,SOCK_STREAM)
tcpSerSock.bind(ADDR)
tcpSerSock.listen(5)
while True:
print("Waiting for connection...")
(tcpCliSock,addr)=tcpSerSock.accept()
print("...connected from:",addr)

while True:
data=tcpCliSock.recv(BUFSIZ)
if not data:
print("Server:Empty")
break
print("server:",data)

tcpCliSock.send(data) #运行到这里报错
tcpCliSock.close()

tcpSerSock.close()


客户端

#coding:utf-8
from socket import *
HOST="localhost"
PORT=21567
BUFSIZ=1024
ADDR=(HOST,PORT)

tcpCliSock=socket(AF_INET,SOCK_STREAM)
tcpCliSock.connect(ADDR)

while True:
data=input('>')
if not data:
break

data=data.encode("utf-8")
print("encode:",data)
data=bytes(data)
print("bytes:",data)

tcpCliSock.send(data)
data=tcpCliSock.recv(BUFSIZ)
if not data:
print("Client:Empty")

print("Client receive:",data)
break


tcpCliSock.close()


操作的步骤如下:
1:为服务器端和客户端分别开了两个IDLE
2:先运行服务器端,良好。
3:然后运行客户端,良好。
4:在客户端的IDLE中输入字符abcd,良好
5:服务器端已收到数据,服务器端IDLE显示的打印如下:

Waiting for connection...
...connected from: ('127.0.0.1', 15617)
server: b'abcd'


但是在执行下一句的时候报错:
socket.error: [Errno 10038] 在一个非套接字上尝试了一个操作。

我怀疑是

tcpCliSock.send(data)

有问题,但不知道为什么会报错?

请大家帮忙看看是怎么回事?
...全文
146 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
hrbhot 2011-02-23
  • 打赏
  • 举报
回复
原因是代码缩进。。。

tcpCliSock.send(data) #运行到这里报错
tcpCliSock.close()
把tcpCliSock.close() 推到行首 就不报错了
eastglave009 2010-11-09
  • 打赏
  • 举报
回复
好复杂哦 啊
墨菲叔叔 2010-11-09
  • 打赏
  • 举报
回复
真正出错的应该是服务器代码中的
data=tcpCliSock.recv(BUFSIZ)

服务器代码里层while,在tcpCliSock.close()后要break掉!
angel_su 2010-11-08
  • 打赏
  • 举报
回复
服务器代码tcpCliSock.close()后面应该break跳出最内层while吧...

37,738

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧