我正在學習TCP IP協議。我想在實踐中看到同時打開,關閉,半開/關等條件。我已經創建了簡單的TCP服務器和客戶端程序。我怎樣才能模擬同時打開/關閉,半開/關條件?像在兩者之間給予睡眠,control-c等。我使用'netstat'來查看TCP數據包。它可以在同一臺機器上模擬(服務器和客戶機都將運行)?如何模擬tcp同時打開和關閉條件?
感謝
我正在學習TCP IP協議。我想在實踐中看到同時打開,關閉,半開/關等條件。我已經創建了簡單的TCP服務器和客戶端程序。我怎樣才能模擬同時打開/關閉,半開/關條件?像在兩者之間給予睡眠,control-c等。我使用'netstat'來查看TCP數據包。它可以在同一臺機器上模擬(服務器和客戶機都將運行)?如何模擬tcp同時打開和關閉條件?
感謝
克服TCP會話的建立完全的控制,等等,一個辦法是制定自己的TCP/IP數據包,並使用原始套接字發送。這是一個工作,但是你必須真正瞭解TCP/IP數據包是如何構建的,所以這可能是一個很好的學習體驗。
這既不必要也不夠。 – EJP
請在您的回答中不要添加評論。請@EJP詳細說明使用評論。您也看不到您的帖子投了誰。 – CodeCaster
對不起,學習,我欣賞指示。 @EJP,請你詳細說明爲什麼你不相信這是一種用來製作數據包並使用原始套接字研究TCP行爲(例如發送單個TCP SYN包)的方法。我完成了這一切,並從中學到了很多東西。 – MartinF
我只是模擬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同時關閉這樣的:
您應該在SuperUser網站上提出這個問題,因爲SO是基於編程的問題。 – jpou
@jpou如果沒有*編程,你無法回答這個問題。 – EJP