Ошибка подключения с клиентом c # к серверу c

1

Я пытаюсь подключить мой клиент С# к моему серверу 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");}
}
}

Клиент С#:

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

Что не так?

заранее спасибо

  • 0
    Вы получаете какие-либо ошибки? Или просто перерыв?
  • 0
    Я получаю исключение тайм-аута
Теги:
server
client
tcp

2 ответа

0
Лучший ответ

На linux вам определенно нужно это:

serv_addr.sin_port = htons(802);

потому что вам нужно перейти от хоста к сетевому порядку. Таким образом, ваш сервер фактически прослушивает другой порт, чем вы ожидали. т.е. 802 байта обратного.

  • 0
    Это все еще не работает, какие-либо другие предложения?
  • 0
    пропингуйте IP-адрес сервера, к которому вы хотите получить доступ. Убедитесь, что нет брандмауэра, сначала запустите сервер и клиент локально, прежде чем переходить на удаленный компьютер.
Показать ещё 16 комментариев
0

Это связано с тем, что вам нужно выполнять переадресацию портов на Linux. Настройка брандмауэра Linux не позволяет получать данные на сервере.

  1. перейдите в систему tab-> администрирование.
  2. выбрать межсетевой экран
  3. выбрать другие порты
  4. добавьте порт, который хотите использовать сервер

Теперь запустите ваш сервер

Ещё вопросы

Сообщество Overcoder
Наверх
Меню