如何在任何语言C++;,Python、Java、C

如何在任何语言C++;,Python、Java、C,python,sockets,Python,Sockets,我有一个想法,比如如何在客户端和服务器之间建立基本的通信。所以序列化数据流可以在客户端和服务器之间传递。但是我想知道,如何在两个客户端之间传递套接字对象:我想知道是否可以在两个客户端之间传递套接字对象,并且两者共享同一个套接字实例。请建议 Client class: import socket import sys # create a TCP/IP socket sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #conne

我有一个想法,比如如何在客户端和服务器之间建立基本的通信。所以序列化数据流可以在客户端和服务器之间传递。但是我想知道,如何在两个客户端之间传递套接字对象:我想知道是否可以在两个客户端之间传递套接字对象,并且两者共享同一个套接字实例。请建议

Client class:

import socket
import sys

# create a TCP/IP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

#connect the socket to the port where server is listening
server_address = ('localhost',2000)
print >>sys.stderr, 'connecting to %s port %s' % server_address
sock.connect(server_address)

#after connection is established, data can be through socket with sendall() and recv()

try:
    #send data

    message = 'This is Message. It will be repeated'
    print >>sys.stderr, 'sending "%s"' % message
    sock.sendall(message)

    #llok for the response
    amount_received = 0
    amount_expected = len(message)

    while amount_received < amount_expected:
        data = sock.recv(16)
        amount_received += len(data)
        print amount_received
        print >>sys.stderr, 'received "%s"' % data

finally:
    print >>sys.stderr, 'closing socket'
    sock.close()

服务器启动后,客户端与服务器连接并显示适当的消息。现在,我不想在客户机和服务器之间发送消息,而是想向另一个客户机发送套接字对象,这可以使用
TCP
UDP
实现。在
TCP
中,需要对数据进行序列化。我想知道是否有任何方法可以包装套接字对象并传递它

套接字对象不能被传输(或者你知道,远程传输:D)到另一种语言或任何东西。您最多可以创建一个协议,通过该协议,套接字实例可以传输到另一种语言。但是,我不知道这对你有什么帮助

您有一个服务器套接字正在侦听2000端口。另一个Java套接字可以使用客户端套接字连接到它。那么,将一个套接字发送到另一个套接字有什么意义呢?通信链路不知怎么被旋转了。比如,我们可以吃下自己来再生。但这是不可能的

类似地,最多可以将服务器套接字的实例发送到java套接字。但是在同一台计算机上,Java将无法重新创建它,因为端口已经被另一个程序监听

接下来,如果两个程序可以在同一个端口上监听,那么窃取数据和伪造数据就相当容易了。因此,两个程序不可能在同一端口上侦听

我认为您需要的是,两个程序组合处理同一套接字的I/O。这至少是合理的

为此,您应该在这两个进程之间创建某种双向通信链接。就像不同端口上的另一个套接字一样

与S一样,S是服务器(套接字S1的唯一所有者),而A和B是处理程序。 S应该在两个不同的端口上侦听。其中只有A和B连接。然后,根据S的判断,S收到的任何数据都将是A或B合适的,然后,A或B将回复该请求。然后S会做出适当的反应

另一种方法是使用
main
服务器套接字。A和B是监听不同端口的服务器。无论何时数据到达S,S都会根据内容将其发送到A或B

第三,最混乱的解决方案是,A是服务器,它通过某种通信(服务器客户端或线程或子进程)将一些任务卸载给B,并且它们适当地处理数据。 之所以称之为凌乱,是因为一个人必须处理两项任务,而且很难维护其功能


但是,共享套接字就像使用同一页的副本来执行两个不同的任务。希望有帮助

您希望两边都有相同的插座吗?为什么?您的处理程序是主机和端口。在每个连接(输入或输出)上都有新的套接字描述符。当你说“套接字对象”时,不清楚你的意思是什么。你是说“一个表示套接字的对象”,还是一个表示其他东西的对象,你想用套接字作为传输机制传输到另一个程序?表示socketHi的对象,我想知道如何在两个客户端之间传递套接字对象,以便两个客户端使用相同的套接字实例连接到服务器。在Java或任何其他语言中,是否可以将socket对象传递给另一个cleint,并使用该信息使另一个cleint能够连接到服务器。对象属于程序。您最多可以重用端口(如果启用了REUSEADDR),但无法“共享”套接字。我可以把球握在你手里。但是你能帮我一下吗?它可以归结为这一点。两个不同的进程不能共享同一个套接字。但他们可能共享相同的信息
Server class:

import socket
import sys

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_address = ("localhost",2000)
print >>sys.stderr, 'starting up on %s port %s' %server_address
sock.bind(server_address)

sock.listen(1)

while True:
    print >>sys.stderr, 'waiting for connection'
    connection, client_address = sock.accept()

    try:
        print >>sys.stderr, 'connection from', cleint_address

        while True:
            data = connection.recv(16)
            print >>sys.stderr, 'received "%s"' % data
            if data:
                print >>sys.stderr, 'sending data back to the client'
                connection.sendall(data)
            else:
                print >>sys.stderr, 'no more data from', client_address
                break
    finally:
        connection.close()