2013-07-13 43 views
0

有人可以添加到我的示例下,定義客戶端套接字的代碼嘗試連接到服務器2秒鐘嗎? 我讀過關於這個,我沒有成功做到這一點,因爲我要求一個例子。嘗試連接到服務器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() 

謝謝。

+0

我們還需要查看您的服務器端代碼。我運行了你的代碼,顯而易見的結果是關於缺乏服務器端程序的抱怨。 – Yotam

+0

謝謝你的提示,我編輯。 – MultiPython

回答

1

不是有兩個單獨的python文件,您可以有一個文件,但將服務器和客戶端放在單獨的線程中。 sys.stdout.write被用來代替打印,因爲打印被緩衝(它混合字符串)的一些併發問題。

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() 
+0

謝謝你的幫助,但它不起作用。 – MultiPython

+1

你確定嗎?它適用於我的電腦。 – dilbert

+0

是的,我相信,你可以嘗試修復它嗎? – MultiPython

相關問題