我正在尝试将an example用于服务器,但客户端只能发送一条消息,然后服务器将回复一个号码。
这是代码。
import socket
mySocket = socket.socket ( socket.AF_INET, socket.SOCK_STREAM )
mySocket.bind ( ( '', 2000 ) )
mySocket.listen ( 1 )
while True:
channel, details = mySocket.accept()
print 'We have opened a connection with', details
print channel.recv ( 100 )
channel.send ( 'Green-eyed monster.' )
channel.close()
问题:
为什么每当客户端向服务器发送消息时,它都会以数字响应?
如何在Internet上使用套接字,而不是通过LAN?
我有办法让服务器使用套接字将数据从客户端移动到客户端 - 有点像IM程序。
我很可能会在我的Mac上为我的朋友托管这个IM服务器 - 它可以在OS(Mac,PC)之间工作
是否有适合使用的好库? (我听说HTTP很棒)
这些代码行确实令人困惑。他们是如何运作的?
print channel.recv ( 100 )
channel.send ( 'Green-eyed monster.' )
此外,当我关闭服务器(使用红色X)并重用端口时,它会说:
Traceback (most recent call last):
File "C:\Users\****\Desktop\Python\Sockets\First Server\server.py",
line 3, in <module>
mySocket.bind ( ( '', 2003 ) )
File "C:\Python27\lib\socket.py", line 224, in meth
return getattr(self._sock,name)(*args)
error: [Errno 10048] Only one usage of each socket address
(protocol/network address/port) is normally permitted
最后,哪些好的教程让我更好地理解这一点?
很抱歉在同一篇文章中提出了这么多问题,但是当我发布this和this时,有人因为发布不同问题中的类似问题而生气。
Python版本:Python 2.7.3
答案 0 :(得分:0)
我做了一些研究(几个小时)并找到了解决问题的方法!
3:是的,有一种让客户端相互通信的方法,他们只需要使用服务器!你必须初始化一个无限循环服务器端,它将接收数据并发送它。这就是我解决问题的方法:
while True:
#Receiving from client
data = conn.recv(1024)
if not data:
break
conn.sendall(data)
print data
#To come out of the loop
conn.close()
此程序是名为 clientthread 的定义的一部分,该定义初始化与客户端的所有连接。 “Actual”循环继续执行线程的其余部分:
while True:
#Wait to accept a connection - blocking call
conn, addr = s.accept()
#display client information (IP address)
print 'Connected with ' + addr[0] + ':' + str(addr[1])
#Start new thread takees 1st argument as a function name to be run, second
#is the tuple of arguments to the function
start_new_thread(clientthread ,(conn,))
4:是的,它可以在OS之间运行。套接字是平台的独立。
6:这行代码实际上非常简单。行print channel.recv ( 100 )
告诉服务器打印用户输入,最多100个字符。下一行channel.send ( 'Green-eyed monster.' )
只是告诉服务器向客户端发送消息Green-eyed monster
。
7:发生此错误是因为每个端口不能打开多个套接字。我建议在代码末尾使用s.close()
或sys.exit()
这样的行来关闭端口。或者你可以简单地选择另一个!
8:互联网上有一些很棒的教程。教你套接字基础知识的是this。 Telnet对我来说真的很混乱,所以我发现与this客户端一起可以创建一个自定义客户端,实际上要好得多。
如果您有任何问题,请随时发表评论,我会尽力回答。