如何模拟tcp同时打开和关闭的情况?

如何模拟tcp同时打开和关闭的情况?,tcp,network-programming,tcp-ip,simultaneous,Tcp,Network Programming,Tcp Ip,Simultaneous,我正在学习TCP IP协议。我希望在实践中看到同时打开、关闭、半打开/关闭等情况。我创建了简单的TCP服务器和客户端程序。如何模拟同时打开/关闭、半打开/关闭条件?比如在中间进行睡眠、control-c等。我使用“netstat”查看TCP数据包。是否可以在同一台机器上模拟(服务器和客户端都将运行) 感谢能够完全控制TCP会话设置等,一种方法是创建自己的TCP/IP数据包并使用原始套接字发送。这是一点工作,但您必须确切了解TCP/IP数据包是如何以这种方式构造的,这样才能获得良好的学习体验。我只

我正在学习TCP IP协议。我希望在实践中看到同时打开、关闭、半打开/关闭等情况。我创建了简单的TCP服务器和客户端程序。如何模拟同时打开/关闭、半打开/关闭条件?比如在中间进行睡眠、control-c等。我使用“netstat”查看TCP数据包。是否可以在同一台机器上模拟(服务器和客户端都将运行)


感谢能够完全控制TCP会话设置等,一种方法是创建自己的TCP/IP数据包并使用原始套接字发送。这是一点工作,但您必须确切了解TCP/IP数据包是如何以这种方式构造的,这样才能获得良好的学习体验。

我只模拟了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同步关闭如下:


您应该在超级用户网站上提问,基于编程的问题也是如此。@JP您在没有编程的情况下无法回答此问题。这既不是必要的,也不是充分的。请不要在回答中添加对您答案的评论。请@EJP使用注释进行详细说明。你也看不到谁对你的帖子投了票。对不起,学习,我感谢你的指导@EJP,你能详细说明一下为什么你不相信这是一种制作数据包和使用原始套接字来研究TCP行为(例如发送单个TCP SYN数据包)的方法吗。我就是这么做的,从中学到了很多。