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

时间:2015-03-13 14:46:53

标签: c# c tcp client server

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

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

c server:

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);
}

出了什么问题?

提前致谢

2 个答案:

答案 0 :(得分:0)

在Linux上你绝对需要这个:

serv_addr.sin_port = htons(802);

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

答案 1 :(得分:0)

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

  1. 转到系统标签 - &gt;施用
  2. 选择防火墙
  3. 选择其他端口
  4. 添加您希望服务器使用的端口
  5. 现在运行您的服务器