1 局域网聊天的程序(C++版) //server #include <winsock.h> #include <iostream.h> #include <stdio.h> #include <string.h> #include <windows.h> #define PORT 100 #define socklen_t int #pragma comment(lib, "wsock32.lib") SOCKET s; SOCKET client; sockaddr_in from; void ServerThread() { char message[256]; while(1) { strcpy(message,""); int len=recv(client,message,sizeof(message),0); if (strcmp(message,"")!=0) { cout<<"从"<<inet_ntoa(from.sin_addr)<<"得到消息:\n"; //cout<<"len:"<<len<<endl; message[len]='\0'; cout<<message; } } } int main() { sockaddr_in srv; int fromlen=sizeof(from); char message[256]="Welcome!\n"; WSADATA wsadata; WORD VersionRequested=MAKEWORD(1,1); if (WSAStartup(VersionRequested,&wsadata)) { cout<<"Wsadata start failed\n"; return 0; } s=socket(PF_INET,SOCK_STREAM,0); if (s==INVALID_SOCKET) { cout<<"Socket create failed\n"; return -1; } srv.sin_family=PF_INET; srv.sin_addr.s_addr=htonl(INADDR_ANY); srv.sin_port=htons(PORT); if (bind(s,(struct sockaddr *)&srv,sizeof(srv))!=0) { cout<<"bind failed\n"; closesocket(s); return -1; } cout<<"Wait...\n"; if (listen(s,5)!=0) { cout<<"listen failed\n"<<endl; return -1; } while(1) { client=accept(s,(struct sockaddr *)&from,&fromlen); send(client,message,strlen(message),0); cout<<"connect from "<<inet_ntoa(from.sin_addr)<<endl; DWORD Sthread; CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)(ServerThread),NULL,0,&Sthread); while(fgets(message,strlen(message),stdin)) { cout<<"发出消息:"<<message<<endl; send(client,message,strlen(message),0); } } closesocket(s); WSACleanup(); } 作者: elva6401 封 2005-7-27 16:08 回复此发言 删除此发言 -------------------------------------------------------------------------------- 2 回复:局域网聊天的程序(C++版) //client #include <winsock.h> #include <iostream.h> #include <stdio.h> #include <string.h> #include <windows.h> #define PORT 100 #define socklen_t int #pragma comment(lib, "wsock32.lib") SOCKET client; char server[50]; void ClientThread() { char message[256]; while(1) { strcpy(message,""); int len=recv(client,message,sizeof(message),0); if (strcmp(message,"")!=0) { cout<<"从"<<server<<"得到消息:\n"; //cout<<"len:"<<len<<endl; message[len]='\0'; cout<<message; } } } int main() { char message[256]; sockaddr_in srv; WSADATA wsadata; WORD VersionRequested=MAKEWORD(1,1); if (WSAStartup(VersionRequested,&wsadata)) { cout<<"Wsadata start failed\n"; return 0; } client=socket(PF_INET,SOCK_STREAM,0); if (client==INVALID_SOCKET) { cout<<"Socket create failed\n"; return -1; } srv.sin_family=PF_INET; srv.sin_addr.s_addr=htonl(INADDR_ANY); srv.sin_port=htons(PORT); cout<<"请输入服务器IP:"; cin>>server; srv.sin_addr.s_addr = inet_addr(server); if (connect(client,(struct sockaddr *)&srv,sizeof(srv))==SOCKET_ERROR) { cout<<"无法连接服务器.\n"; WSACleanup(); return -1; } while(1) { DWORD thread; CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)(ClientThread),NULL,0,&thread); while(fgets(message,strlen(message),stdin)) { cout<<"发出消息:"<<message<<endl; send(client,message,strlen(message),0); } } closesocket(client); WSACleanup(); } 作者: elva6401 封 2005-7-27 16:09 回复此发言 删除此发言 -------------------------------------------------------------------------------- 3 回复:局域网聊天的程序(C++版) 注: 1.不程序很多代码都是参照"二品黄山"的C版 (http://post.baidu.com/f?kz=14413292) 2.本程序用C++的多线程编程,多线程编程是我第一次用,不知道对不对 3.程序只在一台电脑实现过,穷啊!没有2台:).

评论