C# TCPListener不工作?

C# TCPListener不工作?,c#,c,multithreading,tcp,tcplistener,C#,C,Multithreading,Tcp,Tcplistener,如上所述,据我所知,我昨晚/今早有一些奇怪的行为。 我重写了我的一些程序,使位线程化,它似乎工作,然后今天再次尝试,但似乎没有,我不明白为什么它会采取不同的行动 有关守则: Thread oThread2 = new Thread(() => test()); oThread2.Start(); 要启动线程,请使用以下线程的开头: public int test() { IPAddress loca

如上所述,据我所知,我昨晚/今早有一些奇怪的行为。 我重写了我的一些程序,使位线程化,它似乎工作,然后今天再次尝试,但似乎没有,我不明白为什么它会采取不同的行动

有关守则:

                Thread oThread2 = new Thread(() => test());
                oThread2.Start();
要启动线程,请使用以下线程的开头:

public int test()
    {

        IPAddress localAddr = IPAddress.Parse("192.168.0.149");

        TcpListener server = new TcpListener(localAddr, 1234);
        server.Start();

        Debug.WriteLine("Waiting for a connection... ");

        TcpClient client = server.AcceptTcpClient();
        Debug.WriteLine("Connected!");

        NetworkStream stream = client.GetStream();
这个线程似乎没有问题,但是acceptTcpClient()行似乎没有完成,尽管服务器端的代码是

pthread_t processThread;
if(pthread_create(&processThread, NULL, ProcessFrameThread, &incomingframesize))
{
        printf("ERROR creating thread!\n");
        close(conn_desc);
        close(sock_descriptor); 
        return -1;
}
然后:

void*ProcessFrameThread(void*inc\u framesize)
{
int incomingframesize=*((int*)inc_framesize);
无符号字符processframebuffer[incomingframesize];
int sockfd,端口号,n;
服务地址中的结构sockaddr\u;
结构主机*服务器;
sockfd=套接字(AF_INET,SOCK_STREAM,0);
if(sockfd<0)
printf(“打开套接字失败\n”);
服务器=gethostbyname(“192.168.0.149”);
如果(服务器==NULL)
{
printf(“错误,无此类主机”);
出口(0);
}
bzero((char*)&serv_addr,sizeof(serv_addr));
serv_addr.sin_family=AF_INET;
b复制((char*)服务器->h_地址,(char*)和服务地址sin_地址s_地址,服务器->h_长度);
serv_addr.sin_port=htons(1234);
printf(“已创建客户端,正在尝试连接”);
if(connect(sockfd,(struct sockaddr*)&serv_addr,sizeof(serv_addr))<0)
{
错误(“连接错误”);
}
printf(“连接回主机:)\n”);
从我找到的一个教程中摘取,正如我所说的,最奇怪的是,尽管我没有改变任何东西,但昨晚它似乎起了作用:/

这是我第一次真正地做线程,所以我不会对自己做错了什么感到惊讶。只是我真的不知道是什么。在PC机上,我在调试窗口中看到“等待连接…”,在笔记本电脑上看到“创建客户端,尝试连接”。因此,线程似乎正在启动,只是它们没有完成互相敲打/

我通过端口1235连接到笔记本电脑没有问题,之前也通过相同的连接进行了响应,但是在尝试使其线程化时,我没有看到使用相同连接的简单方法,因此我认为我应该在端口1234上为返回创建一个单独的连接


任何建议都会被理解为:< /P>这是C++而不是C代码,请删除“C”标签,服务器端看起来像直C。注释C++是有用的。来吧。我以为我刚才用C来做服务器端的东西,哪些是C++?我把它保存为A.C,如果它有C++会引起一些奇怪的问题吗?大部分的CO。de看起来很好,除了创建套接字句柄的C代码。您将
0
作为协议传递,而通常情况下,您将传递
IPPROTO\u TCP
(其值为6)。可以肯定的是,线程本身并不是任何问题存在的直接原因;正如您所说,您正在获得的诊断信息表明线程正在按预期执行。如果没有线程,就无法确定实际问题是什么。但请尝试修复调用
socket()
的协议参数。
void *ProcessFrameThread(void *inc_framesize)
{

int incomingframesize = *((int *)inc_framesize);
unsigned char processframebuffer[incomingframesize];

int sockfd, portno, n;
struct sockaddr_in serv_addr;
struct hostent *server;

sockfd = socket(AF_INET, SOCK_STREAM, 0);
if(sockfd < 0)
    printf("Failed opening socket\n");

server = gethostbyname("192.168.0.149");
if (server == NULL)
{
  printf("ERROR, no such host");
  exit(0);
}

bzero((char *) &serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
bcopy((char *)server->h_addr,(char *)&serv_addr.sin_addr.s_addr,server->h_length);
serv_addr.sin_port = htons(1234);
printf("Client created, trying to connect\n");
if (connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0)
{
    error("ERROR connecting");
}

printf("Connected back to host :)\n");