繁体   English   中英

将C#客户端连接到C服务器时出错

[英]Error connecting with an c# client to an c server

我正在尝试将c#客户端连接到c服务器。 客户端在Windows上,服务器在Linux上。

服务器运行无误,但客户端无法连接,连接超时。

C服务器:

int main()
{
int socketid;
int clientid = 0;
char bufer[1024];
struct sockaddr_in serv_addr, client_addr;
memset(&serv_addr, 0, sizeof(serv_addr));
int addrlen = sizeof(client_addr);

printf("Start\n");

if((socketid = socket(AF_INET, SOCK_STREAM, 0)) < 0){
    printf("Error ceating socket!\n%s", strerror(errno));
    getchar();
    return 0;
}
printf("S0cket created\n");
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = INADDR_ANY;
serv_addr.sin_port = 802;

if(bind(socketid, (struct sockaddr*) &serv_addr, sizeof(serv_addr)) < 0){
    printf("%s\n", strerror(errno));
    getchar();
    return 0;
}
printf("Bindend\n");
listen(socketid, 0);
printf("Listening\n");

printf("Entering loop\n");
while(1)
{
    sleep((50)*1000);
    clientid = accept(socketid, (struct sockaddr*) &client_addr, &addrlen);
    if(clientid > 0){printf("accepted");}else{printf("error");}
}
}

C#客户端:

void btnClick(object Sender, EventArgs e)
{
    TcpClient client = new TcpClient();
    client.Connect("192.168.1.102", 802);
}

怎么了?

提前致谢

在Linux上,您肯定需要这样做:

serv_addr.sin_port = htons(802);

因为您需要从主机到网络订购。 因此,您的服务器实际上正在侦听与您期望的端口不同的端口。 即802字节反转。

这是因为您必须在Linux上进行端口转发。 linux的防火墙设置不允许在服务器上接收任何数据。

  1. 进入系统标签->管理。
  2. 选择防火墙
  3. 选择其他端口
  4. 添加您要服务器使用的端口

现在运行您的服务器

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM