Bu kodu alıyorum, sanal makineden istemciye bağlanabiliyor, aynı bilgisayarda bağlanabiliyor ancak LOGIN mesajını asla alamıyor, neden olabilir?tcp soket sunucusu göndermiyor
Gönderme hakkında flags
argüman ayarlı olduğundan emin değilsiniz.
static const char *LOGIN = "LOGIN\n";
için:
static const char LOGIN[] = "LOGIN\n";
ve gönderme çağrısı:
static const char *LOGIN = "LOGIN\n";
int main()
{
int s = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in addr;
socklen_t addrlen = sizeof(addr);
//initialize structure
bzero(&addr, addrlen);
addr.sin_family = AF_INET;
addr.sin_port = htons(6666);
addr.sin_addr.s_addr = htonl(INADDR_ANY);
bind(s, (struct sockaddr *)&addr, addrlen);
listen(s, 1);
struct sockaddr_in client_addr;
socklen_t client_addrlen = sizeof(client_addr);
int c = accept(s, (struct sockaddr *)&client_addr, &client_addrlen);
char *msg = new char[15];
//print client address
char * buf = new char[16];
inet_ntop(AF_INET, &(client_addr.sin_addr.s_addr), buf, 16);
cout << "Client connected: " << buf << endl;
cout << "---------------------" << endl;
send(c, LOGIN, sizeof(LOGIN), 0);
close(c);
close(s);
return 0;
}
İyi bir başlangıç, hataları denetlemektir. Tüm bu sistem çağrıları bir hatayla geri dönebilir (-1 değerini döndürürler), bu durumda ['errno'] seçeneğini işaretlemelisiniz (http://man7.org/linux/man-pages/man3/errno. 3.HTML) neyin yanlış gittiğini görmek için. Ör. [print] [http://man7.org/linux/man-pages/man3/perror.3.html] bir mesaj yazdırmak veya ['strerror'] (http://man7.org/) Bir hata kodundan yazdırılabilir bir dize almak için linux/man-pages/man3/strerror.3.html). –