Ich versuche, eine Verbindung zu meinem PC öffentlich von einem anderen Computer und es gibt 10060
Fehlercode von der Connect-Funktion.Winsock Programmierung Verbindung zu einer öffentlichen IP
Wenn ich bind
den Server mit inet_addr("127.0.0.1")
von der lokalen Maschine und mit einem Client verbinden, damit es funktioniert.
Ich habe versucht, mit der öffentlichen IP des Servers mit dem gleichen Client-Code unten zu verbinden, gibt es 10060
kann jemand helfen?
Server
#include<winsock2.h>
int main(){
WSADATA ws;
SOCKET s, newSocket;
struct sockaddr_in server, client;
int c;
if(WSAStartup(MAKEWORD(2,2), &ws) != 0){
puts("error wsastartup");
printf("wsa error at %d", GetLastError());
}
if((s=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET){
printf("socket error at %d", GetLastError());
}
server.sin_addr.s_addr = inet_addr("127.0.0.1");
server.sin_port = htons(8888);
server.sin_family = AF_INET;
if(bind(s, (struct sockaddr*)&server, sizeof(server)) == SOCKET_ERROR){
printf("socket error at %d", GetLastError());
}else{
puts("bind done");
}
listen(s, 3);
puts("Waiting for incoming connections");
c = sizeof(struct sockaddr_in);
char *message = "hello client i got ur message";
while((newSocket = accept(s, (struct sockaddr*) &client, &c)) != INVALID_SOCKET){
puts("connection accepted");
send(newSocket, message, strlen(message), 0);
}
if(newSocket == INVALID_SOCKET){
printf("accept failed iwth the code %d", GetLastError());
return 1;
}
getchar();
closesocket(s);
WSACleanup();
return 0;
}
dies ist der Client
#include <winsock2.h>
int main(){
WSADATA ws;
SOCKET s;
struct sockaddr_in server;
char *message = "hello this is a message";
if(WSAStartup(MAKEWORD(2,2), &ws) != 0){
printf("wsa error at %d", GetLastError());
}else{
puts("wsa done");
}
if((s = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET){
printf("invalid socket at %d", GetLastError());
}
server.sin_family = AF_INET;
server.sin_addr.s_addr = inet_addr("127.0.0.1");
server.sin_port = htons(8888);
if(connect(s, (struct sockaddr*)&server, sizeof(server)) < 0){
printf("connection err %d", GetLastError());
}else{
puts("connected");
}
return 0;
}
Können Sie über den Computer, auf dem Sie den Client ausführen, eine öffentliche IP - Adresse senden? Wenn ja, müssen Sie in der Routereinstellung – Pras
'server.sin_addr.s_addr = inet_addr (" 127.0. 0,1 "); -> server.sin_addr.s_addr = inet_addr ("0.0.0.0"); 'Dadurch wird es an allen Schnittstellen gebunden. –
Hinweis; Der Server gibt bei jeder Verbindung "newSocket" aus. –