一般Python套接字问题有几个答案

问题描述 投票:0回答:1

我正在尝试使用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()

问题:

  1. 为什么每当客户端向服务器发送消息时,它都会响应一个号码?
  2. 如何通过Internet而不是LAN使用套接字?
  3. 有没有办法让服务器使用套接字将数据从客户端移动到客户端 - 有点像IM程序。
  4. 我很可能会在我的Mac上为我的朋友托管这个IM服务器 - 它可以在OS之间工作(Mac,PC)
  5. 有没有好的库可用于此? (我听说HTTP很棒)
  6. 这些代码行真的令人困惑。他们是如何工作的? print channel.recv ( 100 ) channel.send ( 'Green-eyed monster.' )
  7. 此外,当我关闭服务器(使用红色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
  8. 最后,哪些好的教程让我更好地理解这一点?

很抱歉在同一篇文章中提出了这么多问题,但是当我发布thisthis时,有人因为发布有关不同问题的类似问题而生气。

Python版本:Python 2.7.3

python sockets operating-system
1个回答
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客户端一起可以创建一个定制的客户端,实际上要好得多。

如果您有任何问题,请随时发表评论,我会尽力回答。

© www.soinside.com 2019 - 2024. All rights reserved.