2016-02-11 39 views
0

我正在學習TCP IP協議。我想在實踐中看到同時打開,關閉,半開/關等條件。我已經創建了簡單的TCP服務器和客戶端程序。我怎樣才能模擬同時打開/關閉,半開/關條件?像在兩者之間給予睡眠,control-c等。我使用'netstat'來查看TCP數據包。它可以在同一臺機器上模擬(服務器和客戶機都將運行)?如何模擬tcp同時打開和關閉條件?

感謝

+0

您應該在SuperUser網站上提出這個問題,因爲SO是基於編程的問題。 – jpou

+0

@jpou如果沒有*編程,你無法回答這個問題。 – EJP

回答

-1

克服TCP會話的建立完全的控制,等等,一個辦法是制定自己的TCP/IP數據包,並使用原始套接字發送。這是一個工作,但是你必須真正瞭解TCP/IP數據包是如何構建的,所以這可能是一個很好的學習體驗。

+0

這既不必要也不夠。 – EJP

+0

請在您的回答中不要添加評論。請@EJP詳細說明使用評論。您也看不到您的帖子投了誰。 – CodeCaster

+0

對不起,學習,我欣賞指示。 @EJP,請你詳細說明爲什麼你不相信這是一種用來製作數據包並使用原始套接字研究TCP行爲(例如發送單個TCP SYN包)的方法。我完成了這一切,並從中學到了很多東西。 – MartinF

0

我只是模擬TCP同時關閉:

server.py:

import socket 
import sys 

# Create a TCP/IP socket 
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
# Bind the socket to the port 
server_address = ('127.0.0.5', 10000) 
#print >>sys.stderr, 'starting up on %s port %s' % server_address 
sock.bind(server_address) 
# Listen for incoming connections 
sock.listen(1) 

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

client.py:

import socket 
import sys 
import Queue, threading, logging 

def do_client(): 
    # Create a TCP/IP socket 
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 

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

class WorkManager(object): 
    def __init__(self, work_num=100,thread_num=10): 
     self.work_queue = Queue.Queue() 
     self.threads = [] 
     self.__init_work_queue(work_num) 
     self.__init_thread_pool(thread_num) 

    def __init_thread_pool(self,thread_num): 
     for i in range(thread_num): 
      self.threads.append(Work(self.work_queue)) 

    def __init_work_queue(self, work_num): 
     for i in range(work_num): 
      self.add_job(do_job, i) 

    def add_job(self, func, args): 
     self.work_queue.put((func, args)) 

    def check_queue(self): 
     return self.work_queue.qsize() 

    def wait_allcomplete(self): 
     for item in self.threads: 
      if item.isAlive():item.join() 

class Work(threading.Thread): 
    def __init__(self, work_queue): 
     threading.Thread.__init__(self) 
     self.work_queue = work_queue 
     self.start() 
    def run(self): 

     while True: 
      try: 
       do, args = self.work_queue.get(block=False) 
       #print do, args 
       do(args) 
       self.work_queue.task_done() 
      except Exception,e: 
       print str(e) 
       break 

def do_job(args): 
    #print args 
    do_client() 
    #print threading.current_thread(), args 

if __name__ == '__main__': 
    work_manager = WorkManager(100, 10) 
    work_manager.wait_allcomplete() 

我上winodws7測試,發現TCP同時關閉這樣的:

enter image description here