首页 > 代码库 > c++ Socket传输
c++ Socket传输
服务端-监听接收
#include "winsock2.h"#pragma comment(lib,"WS2_32.LIB")int bufi;class mserver{private: SOCKET ssock,csock; sockaddr_in saddr,caddr; int len; char buf[4096];public: mserver(){ } mserver(int port,int maxclient){ saddr.sin_family=AF_INET; saddr.sin_port=htons(port); saddr.sin_addr.s_addr=INADDR_ANY; ssock=socket(AF_INET,SOCK_STREAM,0); if(ssock==INVALID_SOCKET){ printf("build socket error\n"); } if(bind(ssock,(struct sockaddr*)&saddr,sizeof(saddr))==SOCKET_ERROR){ printf("socket bind fail\n"); } len=sizeof(caddr); } void close(){ closesocket(ssock); closesocket(csock); } void beginlisten(){ if(listen(ssock,10)==SOCKET_ERROR){ printf("listen fail\n"); } } void maccept(){ sockaddr a; csock=accept(ssock,(struct sockaddr*)&caddr,&len); if(csock==INVALID_SOCKET){ printf("accept fail : %d\n",WSAGetLastError()); } printf("client from %s connected\n",inet_ntoa(caddr.sin_addr)); } int receive(){ memset(buf,0,4096); if(recv(csock,buf,4096,0)==SOCKET_ERROR){ return 0; } printf("message received : %s\n",buf); send(csock,buf,4096,0); return 1; } };int _tmain(int argc, _TCHAR* argv[]){ WSADATA wsaData; if (WSAStartup(MAKEWORD(2,1),&wsaData)){ printf("Winsock initializing fail\n"); WSACleanup(); return 0; } mserver server(12345,10); server.beginlisten(); server.maccept(); while(server.receive()); server.close(); WSACleanup(); return 0;}
客户端发送数据
#include "winsock2.h"#pragma comment(lib,"WS2_32.LIB")class mclient{private: SOCKET sock; sockaddr_in saddr; int len; char buf[4096];public: mclient(){ sock=socket(AF_INET,SOCK_STREAM,0); len=sizeof(saddr); } bool mconnect(char* addr,int port){ saddr.sin_family=AF_INET; saddr.sin_port=htons(port); saddr.sin_addr.s_addr=inet_addr(addr); if(connect(sock,(struct sockaddr*)&saddr,len)==SOCKET_ERROR){ printf("connect fail : %d",WSAGetLastError()); return false; } return true; } void close(){ closesocket(sock); } void msend(char* mes){ send(sock,mes,strlen(mes),0); } bool receive(){ memset(buf,0,4096); if(recv(sock,buf,4096,0)==SOCKET_ERROR){ return false; } else{ printf("received from server : %s\n",buf); return true; } }};int main(){ while(1){ WSADATA wsaData; if (WSAStartup(MAKEWORD(2,1),&wsaData)){ printf("Winsock initializing fail\n"); WSACleanup(); return 0; } mclient a; if(!a.mconnect("127.0.0.1",12345)){ return 0; } char buf[1024]; while(scanf("%s",buf)){ if(strcmp(buf,"quit")==0){ break; } a.msend(buf); a.receive(); } a.close(); WSACleanup(); } return 0}
ps:如果不在同一函数中声明client与server,将会报错。我用了全局变量后在用了函数声明赋值。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。