如何在Python中将客户端套接字用作服务器套接字

0 投票
1 回答
2881 浏览
提问于 2025-04-18 03:45

我想要一个端口,最开始用来连接到另一个服务器,之后这个端口就变成一个服务器,让其他客户端来连接它。

我现在用Python的socket库做客户端,现在我想用它来做服务器端的socket。
我的代码是:

#!/usr/bin/python           # This is server.py file
import socket               # Import socket module
s = socket.socket()         # Create a socket object
host = socket.gethostname() # Get local machine name
port = 12349
portt = 12341               # Reserve a port for your service.
s.bind((host, portt))       # Bind to the port

s.connect((host, port))
s.listen(5)                 # Now wait for client connection.
c, addr = s.accept()        # Establish connection with client.
print c
print 'Got connection from', addr
print s.recv(1024)
s.close

输出结果是:

Traceback (most recent call last):
  File "client.py", line 12, in <module>
    s.listen(5)                 # Now wait for client connection.
  File "/usr/lib/python2.7/socket.py", line 224, in meth
    return getattr(self._sock,name)(*args)
socket.error: [Errno 22] Invalid argument

我该怎么做呢?谢谢大家的回答!

1 个回答

0

我不太明白你想要做什么。看起来你把客户端和服务器端的代码混在同一个应用里了。

作为参考,你可以这样创建一个简单的回声服务器:

import socket

HOST = ''                
PORT = 12349     
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(5)
conn, addr = s.accept()
print 'Connected by', addr
while 1:
    data = conn.recv(1024)
    if not data: break
    conn.sendall(data)
conn.close()

还有这样一个简单的回声客户端:

import socket

HOST = 'localhost'
PORT = 12349              
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.sendall('Hello, world')
data = s.recv(1024)
s.close()
print 'Received', repr(data)

撰写回答