这学期学了计算机网络,正好上年租了一台阿里云服务器,然后自己就想做一做基于控制台网络聊天程序。服务器是Linux,客户端是我们的windows。写完程序后。发现客户端总是连接超时(wireshark抓包)。并且自己在服务器那里又抓不到对应端口的包,可是我把端口又全部开放了(服务器和阿里云安全组都开放了)。却总是失败。查找了两天的问题后来在下面这篇博客发现了问题。
https://www.dechenyun.com/768.html
#include#include #include #include #include #include #include #include #define BACKLOG 5 #define MAXDATASIZE 1000 int main() { int listenfd,connfd; struct sockaddr_in server; struct sockaddr_in client; int len,val= 1; char recvbuf[MAXDATASIZE]={0}; char senbuf[MAXDATASIZE]={0}; if((listenfd=socket(AF_INET,SOCK_STREAM,0))==-1) { perror("socket"); exit(1); } setsockopt(listenfd,SOL_SOCKET,SO_REUSEADDR,(char*)&val,sizeof(val)); bzero(&server,sizeof(server)); server.sin_family=AF_INET; server.sin_port=htons(27015); server.sin_addr.s_addr=htonl(INADDR_ANY); printf("-2n"); if((bind(listenfd,(struct sockaddr *)&server,sizeof(server)))!=0) { printf("-3"); close(listenfd); perror("bind"); exit(1); } printf("-1n"); if(listen(listenfd,BACKLOG)==-1) { perror("listen"); exit(1); } printf("1n"); len=sizeof(client); if((connfd=accept(listenfd,(struct sockaddr*)&client,&len))==-1) { perror("accept"); exit(1); } if((len=recv(connfd,recvbuf,MAXDATASIZE,0))==-1) { perror("recv"); } putchar('2'); recvbuf[len+1]=' '; send(connfd,recvbuf,len+1,0); FILE*fp=fopen("1,txt","w+"); fprintf(fp,"%s",recvbuf); printf("%s",recvbuf); putchar('3'); close(connfd); close(listenfd); fclose(fp); return 0; }
#define _CRT_SECURE_NO_WARNINGS 1 #define _WINSOCK_DEPRECATED_NO_WARNINGS 1 #include#include #include #include #pragma comment(lib,"WS2_32.lib") SOCKET servesocket,connectsocket; sockaddr_in sockAddr; char name[15]; char buff[1500]={0}; FILE* fp; int main() { WSADATA wsadata; int isok = WSAStartup(MAKEWORd(2, 2), &wsadata); if (isok != 0) { printf("初始化失败n"); return -1; } servesocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); sockAddr.sin_family = AF_INET; sockAddr.sin_port = htons(27015); sockAddr.sin_addr.S_un.S_addr = inet_addr("xxx.xx.xxx.xx");//填服务器的ip地址 if (connect(servesocket, (SOCKADDR*)&sockAddr, sizeof(SOCKADDR))==SOCKET_ERROR) { wprintf(L"connect function failed with error: %ldn", WSAGetLastError()); perror("connect() error!"); closesocket(servesocket); exit(1); } printf("please input your name ,less 15 charactern"); scanf("%s", name); isok=send(servesocket, name, strlen(name), 0); isok = recv(servesocket, buff, sizeof(buff), 0); printf("%s", buff); fp=fopen("hello.txt", "a"); if (fp == NULL) { fp = fopen("Hello.txt", "w+"); } if (fp == NULL) { perror("fopen() error!"); closesocket(servesocket); exit(1); } fprintf(fp, "%s",buff); fclose(fp); closesocket(servesocket); WSACleanup(); return 0; }



