C++ TCP客户端代码怎么写?
C++ TCP客户端代码写法:客户端编程的步骤:1:加载套接字库,创建套接字(WSAStartup()/socket());2:向服务器发出连接请求(connect());3:和服务器端进行通信(send()/recv());4:关闭套接字,关闭加载的套接字库(closesocket()/WSACleanup())。代码:#include #include #pragma comment(lib,"WS2_32.lib")void main(){ WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD(1,1); err = WSAStartup(wVersionRequested,&wsaData); if (err !=0) { return; } if (LOBYTE(wsaData.wVersion) != 1|| HIBYTE( wsaData.wVersion ) != 1 ) { WSACleanup(); return; } SOCKET sockSrv = socket(AF_INET,SOCK_STREAM,0); SOCKADDR_IN addrSrv; addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY); addrSrv.sin_family=AF_INET; addrSrv.sin_port=htons(6000); bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)); listen(sockSrv,5); SOCKADDR_IN addrClient; int len=sizeof(SOCKADDR); while(1) { SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len); char sendBuf[50]; sprintf(sendBuf,"Welcome %s to here!",inet_ntoa(addrClient.sin_addr)); send(sockConn,sendBuf,strlen(sendBuf)+1,0); char recvBuf[50]; recv(sockConn,recvBuf,50,0); printf("%sn",recvBuf); closesocket(sockConn); }}
#include #include void main(){WORD wVersionRequested;WSADATA wsaData;int err;wVersionRequested = MAKEWORD( 1, 1 );err = WSAStartup( wVersionRequested, &wsaData );if ( err != 0 ) {return;}if ( LOBYTE( wsaData.wVersion ) != 1 ||HIBYTE( wsaData.wVersion ) != 1 ) {WSACleanup( );return;}SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);SOCKADDR_IN addrSrv;addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");addrSrv.sin_family=AF_INET;addrSrv.sin_port=htons(6000);connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));char recvBuf[100];recv(sockClient,recvBuf,100,0);printf("%sn",recvBuf);send(sockClient,"This is lisi",strlen("This is lisi")+1,0);closesocket(sockClient);WSACleanup(); }

socket 客户端可以向服务器端接收和发送文件,代码怎么写
之前写过这样的一个小程序,我发布在自己的博客上:http://www.zhouhaibing.com/blog/archive/8Server.c#include #include #include #include // for file read#include #include int main() { /* load the initializer library */ WSADATA wsaData; WSAStartup(MAKEWORD(2, 2), &wsaData); /* list the each fields of wsaData */ // printf("wVersion: %dn", wsaData.wVersion); // 514 // printf("wHighVersion: %dn", wsaData.wHighVersion); // 514 // printf("iMaxSockets: %dn", wsaData.iMaxSockets); // 0 // printf("iMaxUdpDg: %dn", wsaData.iMaxUdpDg); // 0 /* you may not print the lpVendorInfo */ // printf("szDescription: %sn", wsaData.szDescription); // WinSock 2.0 // printf("szSystemStatus: %sn", wsaData.szSystemStatus); // Running /* create socket(address family, type, protocol) */ int socket_fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); /* initialize the addrinfo hints */ struct addrinfo hints; memset(&hints, 0, sizeof(hints)); hints.ai_family = AF_INET; hints.ai_socktype = SOCK_STREAM; hints.ai_protocol = IPPROTO_TCP; hints.ai_flags = AI_PASSIVE; struct addrinfo *result = nullptr; /* by hints, and then get the result(a linked list, see fields below) */ getaddrinfo(NULL, "8080", &hints, &result); /* the member fiekds of result */ // printf("ai_family: %dn", result->ai_family); // 2 // printf("ai_socktype: %dn", result->ai_socktype); // 1 // printf("ai_protocol: %dn", result->ai_protocol); // 6 // printf("ai_flags: %dn", result->ai_flags); // 0 // printf("ai_canonname: %sn", result->ai_canonname); // (null) // printf("ai_a ddrlen: %dn", result->ai_addrlen); // 16 // printf("ai_addr->sa_family: %dn", result->ai_addr->sa_family); // 2 // printf("ai_addr->sa_data: %sn", result->ai_addr->sa_data); // // printf("ai_next: %xn", result->ai_next); // 0 /* bind the socket to a address */ /* bind(socket, sockaddr name, name len) */ bind(socket_fd, result->ai_addr, result->ai_addrlen); freeaddrinfo(result); /* listen the socket */ /* listen(socket, backlog) */ listen(socket_fd, SOMAXCONN); /* 0x7fffffff */ while(true) { /* accept a connection */ /* accept(socket, addr, addrlen) */ int client_fd = accept(socket_fd, nullptr, 0); printf("New Connection Eastablished...n"); /* Now we send the source code of this file to client */ std::ifstream fin("c:\source.cpp"); /* store it into a buffer. */ while (fin.good()) { // I rememeber there is a method called getline std::string s; getline(fin, s); // we need a new line s = s + 'n'; send(client_fd, s.c_str(), s.size(), 0); } fin.close(); /* close client socket */ closesocket(client_fd); } /* may be never invoked */ closesocket(socket_fd); WSACleanup(); return 0;}Client.c#include #include #include #include int main() { /* load the initializer library */ WSADATA wsaData; WSAStartup(MAKEWORD(2, 2), &wsaData); /* create socket */ int socket_fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); /* connect */ sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_addr.s_addr = inet_addr("127.0.0.1"); addr.sin_port = htons(8080); /* connect(socket, sockaddr, namelen) */ connect(socket_fd, (sockaddr*)&addr, sizeof(addr)); /* buffer memory */ char buf[1024]; /* open a file for write */ std::ofstream fout("source.cpp", std::ios_base::trunc); while (true) {int read = recv(socket_fd, buf, 1024, 0); if (read == 0) { fout.close(); printf("Connection Closed...n"); break; } if (read > 1024) { printf("Buffer Overflow...n"); } else { buf[read - 1] = 0; /* now we can print the bytes from server */ fout << buf << std::endl; } } /* close socket */ closesocket(socket_fd); WSACleanup(); return 0;}

linux c socket 客户端循环十次向服务器发送数据(tcp连接),为啥只能接受第一次的?求代码
只是做这些动作的话不需要多线程 找了下以前写的 改成了你说的10次发送client.c:#include#include#include#include#include#include#includeint main(int argc,char **argv){char wbuf[] = "hello server";char rbuf[128];int i;int sock; struct sockaddr_in server = {0}; struct timeval timeo;timeo.tv_sec= 0; timeo.tv_usec = 1000 * 1000; // socklen_t len = sizeof(timeo);if( argc != 2){printf("usage: ./client n");return -1;}sock = socket(AF_INET, SOCK_STREAM, 0);if(sock < 0){perror("Create TCP Socket");return -1;}setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, &timeo, len);server.sin_family = AF_INET;server.sin_port = htons(30000);inet_pton(AF_INET,argv[1], &(server.sin_addr));int res = connect(sock, (struct sockaddr*)&server, sizeof(server));if (res < 0){if(res == EINPROGRESS)perror("connecting stream socket time out:");elseperror("connecting stream socket error:");close(sock);return -1;}else{printf("Connect Server@%sn",argv[1]);for(i=0;i<10;i++){int wsize = send(sock,wbuf,sizeof(wbuf),0);if(wsize<=0){perror("write error:");close(sock);return -1;}printf("1111111i=%dn",i);while(1){ int rsize=recv(sock,rbuf,sizeof(rbuf),0); if(rsize>0){rbuf[rsize]=' ';printf("recv msg from server: %sn",rbuf);break;}if(rsize<0){close(sock);perror("read error:");return -1;}}}close(sock);return 0;}}server.c:#include#include#include#include#include#include#includeint main(int argc, char** argv){intlistenfd, connfd;struct sockaddr_in servaddr = {0};charrbuf[128];charwbuf[] = "hello client";int n;if( (listenfd = socket(AF_INET, SOCK_STREAM, 0)) == -1 ){perror("Create TCP Socket");return -1;}servaddr.sin_family = AF_INET;servaddr.sin_addr.s_addr = htonl(INADDR_ANY);servaddr.sin_port = htons(30000);if( bind(listenfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) == -1){perror("bind socket error:");return -1;}if( listen(listenfd, 10) == -1){perror("listen socket error:");return -1;}printf("======waiting for client's request======n");while(1){if( (connfd = accept(listenfd, (struct sockaddr*)NULL, NULL)) == -1){perror("accept socket error:");continue;}while(1){n = recv(connfd, rbuf, sizeof(rbuf), 0);if(n>0){rbuf[n] = ' ';printf("recvmsg from client: %sn", rbuf);n = send(connfd, wbuf, sizeof(wbuf),0);if(n<=0){perror("sned error:");close(connfd);break;}}else if(n < 0){perror("recv error:");close(connfd);break;}}close(connfd);}close(listenfd);return 0;}运行的时候 client./client 你的serverip 端口我用的30000 写死在程序里了
你想实现相互通讯的话,必须要起线程或者进程。线程比较麻烦,建议先研究进程吧。server收到服务端链接后,fork()一个进程,该进程对这一个客户端进行服务。 一般咱们都是堵塞的收发数据,都是服务端fork()一个进程后,调用读read操作,如收到数据(客户端请求),给予反馈,向客户端send数据。客户端成功链接后,发送数据,然后等待反馈。只能一个收,收到后在发,一直堵塞。当然也有非堵塞模式,这个关系超时操作,你先研究简单的吧。你要做到类似qq的东西,那只能多进程并发,就是一个进程发送,一个进程收取。用fork函数。也就是,客户端和服务端收发数据都分别fork一个进程。 不知是不是你想要的答案。我的代码不能给你,给你个开源的,cppsocket,比较难。自己下载,可以参考下。
你尝试下客户端发送的10次之间加入间隔;看看下效果再说

采用tcp协议,使用socket编程,编写程序完成客户端发送消息给服务端,服务端接到消息后,再发
服务端代码: /*server.c*/#include #include #include #include #include #include #include #include #define PORT4321#define BUFFER_SIZE 1024#define MAX_QUE_CONN_NM 5int main(){struct sockaddr_in server_sockaddr, client_sockaddr;int sin_size, recvbytes;int sockfd, client_fd;char buf[BUFFER_SIZE];/*建立socket连接*/if ((sockfd = socket(AF_INET,SOCK_STREAM,0))== -1){perror("socket");exit(1);}printf("Socket id = %dn",sockfd);/*设置sockaddr_in 结构体中相关参数*/server_sockaddr.sin_family = AF_INET;server_sockaddr.sin_port = htons(PORT);server_sockaddr.sin_addr.s_addr = INADDR_ANY;bzero(&(server_sockaddr.sin_zero), 8);int i = 1;/* 使得重复使用本地地址与套接字进行绑定 */setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &i, sizeof(i));/*绑定函数bind*/if (bind(sockfd, (struct sockaddr *)&server_sockaddr, sizeof(struct sockaddr))== -1){perror("bind");exit(1);}printf("Bind success!n");/*调用listen函数*/if (listen(sockfd, MAX_QUE_CONN_NM) == -1){perror("listen");exit(1);}printf("Listening....n");/*调用accept函数,等待客户端的连接*/if ((client_fd = accept(sockfd, (struct sockaddr *)&client_sockaddr, &sin_size)) == -1){perror("accept");exit(1);}/*调用recv函数接收客户端的请求*/memset(buf , 0, sizeof(buf));if ((recvbytes = recv(client_fd, buf, BUFFER_SIZE, 0)) == -1){perror("recv");exit(1);}printf("Received a message: %sn", buf);if ((sendbytes = send(sockfd, buf, strlen(buf), 0)) == -1){perror("send");exit(1);}close(sockfd);exit(0);}客户端:/*client.c*/#include #include #include #include #include #include #include #include #include #define PORT4321#define BUFFER_SIZE 1024int main(int argc, char *argv[]){int sockfd, sendbytes;char buf[BUFFER_SIZE];struct hostent *host;struct sockaddr_in serv_addr;if(argc < 3){fprintf(stderr,"USAGE: ./client Hostname(or ip address) Textn");exit(1);}/*地址解析函数*/if ((host = gethostbyname(argv[1])) == NULL){perror("gethostbyname");exit(1);}memset(buf, 0, sizeof(buf));sprintf(buf, "%s", argv[2]);/*创建socket*/if ((sockfd = socket(AF_INET,SOCK_STREAM,0)) == -1){perror("socket");exit(1);}/*设置sockaddr_in 结构体中相关参数*/serv_addr.sin_family = AF_INET;serv_addr.sin_port = htons(PORT);serv_addr.sin_addr = *((struct in_addr *)host->h_addr);bzero(&(serv_addr.sin_zero), 8);/*调用connect函数主动发起对服务器端的连接*/if(connect(sockfd,(struct sockaddr *)&serv_addr, sizeof(struct sockaddr))== -1){perror("connect");exit(1);}/*发送消息给服务器端*/if ((sendbytes = send(sockfd, buf, strlen(buf), 0)) == -1){perror("send");exit(1);}if ((recvbytes = recv(sockfd, buf, BUFFER_SIZE, 0)) == -1){perror("recv");exit(1);}close(sockfd);exit(0); }

TCP客户端程序源代码如何编写?
int client() { system("color 0a"); //修改DOS窗口颜色,是其成0A。 WORD wVersion=MAKEWORD(1,1);WSADATA wsData;int nResult= WSAStartup(wVersion,&wsData); //启动WINSOCKETif(nResult !=0){printf("启动Winsock失败!n");}SOCKET sc=socket(AF_INET,SOCK_STREAM,IPPROTO_IP); //创建套接字 if(sc==INVALID_SOCKET){printf("创建套接字失败!n");}SOCKADDR_IN addrSc; addrSc.sin_family=AF_INET;addrSc.sin_port=htons(portNum); //保证字节顺序char IP[20]; again: printf("请输入服务器的IP地址:"); gets(IP);if( -1==inet_addr(IP) ) //循环检测IP地址是否合法 { printf("IP地址错误!n"); goto again; } addrSc.sin_addr.S_un.S_addr=inet_addr(IP);int b=0; while(b<5) //检测5次,如果服务器在此时间内启动,则进行连接 { nResult=connect(sc,(SOCKADDR*)&addrSc,sizeof(SOCKADDR)); //套接字连接 Sleep((DWORD)100); //延时1秒 if(nResult==SOCKET_ERROR){printf(" %d 次连接失败!n",b+1); } else break; b++; } if(nResult==SOCKET_ERROR) { printf("登陆超时,请重新登陆!n"); goto again; } char *buf="连接成功!"; //向服务端验证连接成功 nResult=send(sc,buf,strlen(buf)+1,0);if(nResult==SOCKET_ERROR) {printf("5.套接字发送数据失败!n"); return 0; } char mess[M]; nResult =recv(sc,mess,strlen(mess),0); //接受服务端的连接验证信息 if(nResult == -1 ) //判断服务端是否关闭 { printf("n服务端已断开n"); system("pause"); exit(0); } printf("%sn",mess); tianle:system("cls"); //清屏 puts("nn"); puts(" * * "); puts(" * 欢·迎·使·用·局·域·网·文·件·发·送·工·具 *"); puts(" * (客 户 端) * "); puts(" * * "); puts(" * * "); puts(" * 请等待服务端的相应操作 * "); puts(" * * "); puts(" * * "); puts(" * 天乐软件工作室制作 * "); puts(" * 2008-3-1 * "); puts(" * 版权所有★欢迎传播 * "); puts("全屏(退出全屏)操作请按:ALT+ENTERn"); char rMess[100]; nResult=recv(sc,rMess,strlen(rMess),0); //接收服务端发来的操作请求 if(nResult==-1) //判断服务端是否关闭 { printf("n服务端已断开n"); system("pause"); goto tianle; } printf("%sn",rMess); char ch; char str[100]; gets(str); ch=str[0]; while( ch!='Y' && ch!='y' && ch!='N' && ch!='n' ) //处理客户端的错误输入 { printf("输入有误,请重新输入(Y/N):"); gets(str); ch=str[0]; }send(sc,&ch,sizeof(char),0); //向服务端反馈选择,并执行相应操作 if(strcmp(rMess,"服务端向你传送文件,是否接受(Y/N):")==0 && (ch=='Y' || ch=='y') ) { receiveFile(sc); } if(strcmp(rMess,"服务端向你发起聊天,是否接受(Y/N):")==0 && (ch=='Y' || ch=='y') ) { chatting_client(sc); } if(ch=='N' || ch=='n') { printf("你拒绝了!n"); system("pause"); }system("cls"); goto tianle; nResult=closesocket(sc); //关闭套接字 if(nResult==SOCKET_ERROR){printf("8.关闭套接字失败!n"); return 0; }} 满意请采纳

本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/45173.html。