0

有人可以添加到我的示例中,定义客户端套接字的代码尝试连接到服务器 2 秒好吗?我读到了这一点,但我没有成功,因此我要求举个例子。

例子:

客户:

import socket

TCP_IP = '127.0.0.1'

TCP_PORT = 7777

BUFFER_SIZE = 1024

MESSAGE = "Hello, World!"

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.connect((TCP_IP, TCP_PORT))

s.send(MESSAGE)

data = s.recv(BUFFER_SIZE)

s.close()

print "received data:", data

服务器:

import socket

TCP_IP = '127.0.0.1'

TCP_PORT = 7777

BUFFER_SIZE = 20


s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.bind((TCP_IP, TCP_PORT))

s.listen(1)

conn, addr = s.accept()

print 'Connection address:', addr

while 1:

    data = conn.recv(BUFFER_SIZE)

    if not data: break

    print "received data:", data

    conn.send(data)

conn.close()

谢谢你。

4

1 回答 1

1

您可以拥有一个文件,但将服务器和客户端放在不同的线程中,而不是拥有两个单独的 python 文件。sys.stdout.write 被用来代替 print,因为 print 被缓冲(它混合了字符串)的一些并发问题。

import threading
import socket
import sys

class socket_server(threading.Thread):
    TCP_IP = "127.0.0.1"
    TCP_PORT = 7777
    BUFFER_SIZE = 20
    daemon = True

    def run(self):
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.bind((self.TCP_IP, self.TCP_PORT))
        s.listen(1)

        conn, addr = s.accept()
        (ip, port) = addr

        sys.stdout.write("%s connection address: IP %s on Port %d\n" % (self.__class__.__name__, ip, port))

        data = True
        while data:

            data = conn.recv(self.BUFFER_SIZE)

            if data:
                sys.stdout.write("%s received data: %s\n" % (self.__class__.__name__, data))
                send_data = data.upper()
                sys.stdout.write("%s sending data: %s\n" % (self.__class__.__name__, send_data))
                conn.send(send_data)

        conn.close()

class socket_client(threading.Thread):
    TCP_IP = "127.0.0.1"
    TCP_PORT = 7777
    BUFFER_SIZE = 1024
    TIMEOUT = 2.0
    MESSAGE = "Hello, World!"

    def run(self):
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.settimeout(self.TIMEOUT)
        s.connect((self.TCP_IP, self.TCP_PORT))
        sys.stdout.write("%s sending data: %s\n" % (self.__class__.__name__, self.MESSAGE))
        s.send(self.MESSAGE)

        data = s.recv(self.BUFFER_SIZE)

        s.close()

        if data:
            sys.stdout.write("%s received data: %s\n" % (self.__class__.__name__, data))

server = socket_server()
client = socket_client()

server.start()
client.start()
于 2013-07-14T05:18:33.073 回答