Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将c#客户端连接到c服务器时出错_C#_C_Tcp_Client_Server - Fatal编程技术网

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

将c#客户端连接到c服务器时出错,c#,c,tcp,client,server,C#,C,Tcp,Client,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 = sizeo

我正在尝试将我的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");}
}
}
怎么了


提前感谢

在linux上,您肯定需要:

serv_addr.sin_port = htons(802);
因为你需要从主机到网络的顺序。
因此,您的服务器实际上正在侦听与您预期不同的端口。IE802字节颠倒。

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

  • 转到系统选项卡->管理
  • 选择防火墙
  • 选择其他端口
  • 添加服务器要使用的端口

  • 现在运行服务器

    是否有任何错误?或者只是一个超时?我得到一个超时,除了你想要访问的服务器ip地址。检查是否没有防火墙,在移动到远程计算机之前,首先在本地运行服务器和客户端。ping有效,没有防火墙,如果我在windows上运行它,编译器会给出错误,因此我无法在本地运行它。客户端仍然提供一个SocketExection。同时创建一个c#服务器并首先在本地进行测试。如果一切都很稳定,那就遥控。您还可以使用ethereal检查正在发送和接收的数据包。在发送和接收计算机上切换windows防火墙。c#服务器和c#客户端可以连接,没有错误,防火墙关闭,但仍然存在SocketException。在哪一行出现异常?这是linux服务器还是c#服务器?
    serv_addr.sin_port = htons(802);