博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TCP-socket(2)
阅读量:4149 次
发布时间:2019-05-25

本文共 3467 字,大约阅读时间需要 11 分钟。

Server.cpp

// server.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include 
#pragma comment(lib,"ws2_32.lib")int main(int argc, char* argv[]){ //加载winsock库 WSADATA wsaData; WORD sockVersion = MAKEWORD(2,2); if(WSAStartup(sockVersion,&wsaData)!=0) return 0; //创建套接字 SOCKET sServer = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); //创建socket if(sServer==INVALID_SOCKET) { printf("socket error\n"); return 0; } //socket中装入地址信息 sockaddr_in sin; sin.sin_family = AF_INET; sin.sin_port = htons(1129); sin.sin_addr.S_un.S_addr = INADDR_ANY; //bind套接字 if(bind(sServer,(LPSOCKADDR)&sin,sizeof(sin)) == SOCKET_ERROR) //绑定bind { printf("bind error!\n"); return 0; } //listen模式 if(listen(sServer,5) == SOCKET_ERROR) //监听listen { printf("listen error!\n"); closesocket(sServer); return 0; } //循环接受连接请求 sockaddr_in remoteAddr; SOCKET sClient; int nAddrLen=sizeof(SOCKADDR_IN); char revData[255]; int flag = 1; char data[12]={'1','2','3','4','5','6','7','8','9','a','b','c'}; //待发送数据 int tmp = 0; while(1) { tmp = 0; //等待客户请求的到来 sClient = accept (sServer,(SOCKADDR*)&remoteAddr,&nAddrLen); //接受accept(阻塞) 等待请求 if(sClient==INVALID_SOCKET) { printf("accept error\n"); continue; } printf("接受来自%s的连接.\n",inet_ntoa(remoteAddr.sin_addr)); //发送数据 while(flag) { char SendData[4]; int i,ch; for( i = 0; i<=2; i++) { SendData[i] = data[i+tmp]; } if(tmp == 12) { break; } tmp = tmp + 3; SendData[i] = '\0'; //SendData[i+1] = '\0'; send(sClient,SendData,4,0); printf("数据:%s\n",SendData); } /* while(true) { int ret = recv(sClient,revData,255,0); if(ret==0||(ret==SOCKET_ERROR&&WSAGetLastError()==WSAECONNRESET)) { printf("%s关闭连接\n",inet_ntoa(remoteAddr.sin_addr)); closesocket(sClient); break; } else { revData[ret]='\0'; printf("%s",revData); } } */ //关闭套接字(链接) closesocket(sClient); } //关闭套接字 closesocket(sServer); WSACleanup(); return 0;}
Client.cpp

// client.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include 
#pragma comment(lib,"ws2_32.lib")#include
#define PORT 1129#define ADDRESS "127.0.0.1"int main(int argc, char* argv[]){ //加载winsock库 WSADATA wsaData; WORD sockVersion = MAKEWORD(2,2); if(WSAStartup(sockVersion,&wsaData)!=0) return 0; //创建套接字 SOCKET sClient = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); //创建socket if(sClient==INVALID_SOCKET) { printf("socket error\n"); return 0; } //socket中装入远程地址信息 SOCKADDR_IN remote; remote.sin_family = AF_INET; remote.sin_port = htons(1129); remote.sin_addr.S_un.S_addr = inet_addr(ADDRESS); if(connect(sClient,(SOCKADDR *)&remote,sizeof(SOCKADDR))==SOCKET_ERROR) //连接connet { printf("connect error\n"); closesocket(sClient); return 0; } int index =0; //接收数据(分段接收数据) while(true) { char revData[4]; recv(sClient,revData,4,0); //接收recv revData[3]='\0'; printf("%s\n",revData); index = index +1; if(index == 4) break; } /*while(true) { char SendData[255]; int i,ch; for( i = 0; (i < 254) && ((ch = getchar()) != EOF) && (ch!='\n'); i++) SendData[i] = (char)ch; SendData[i] = '\n'; SendData[i+1] = '\0'; send(sClient,SendData,i+2,0); printf("数据:%s\n",SendData); }*/ //关闭套接字 closesocket(sClient); WSACleanup(); return 0;}
利用socket进行数据分段发送,运行结果:

第一次请求:

服务器

客户端

第二次请求:

你可能感兴趣的文章
Qt文件夹选择对话框
查看>>
DeepLearning tutorial(5)CNN卷积神经网络应用于人脸识别(详细流程+代码实现)
查看>>
DeepLearning tutorial(6)易用的深度学习框架Keras简介
查看>>
DeepLearning tutorial(7)深度学习框架Keras的使用-进阶
查看>>
流形学习-高维数据的降维与可视化
查看>>
Python-OpenCV人脸检测(代码)
查看>>
python+opencv之视频人脸识别
查看>>
人脸识别(OpenCV+Python)
查看>>
6个强大的AngularJS扩展应用
查看>>
网站用户登录系统设计——jsGen实现版
查看>>
第三方SDK:讯飞语音听写
查看>>
第三方SDK:JPush SDK Eclipse
查看>>
第三方开源库:imageLoader的使用
查看>>
自定义控件:飞入飞出的效果
查看>>
自定义控件:动态获取控件的高
查看>>
第三方开源库:nineoldandroid:ValueAnimator 动态设置textview的高
查看>>
第三方SDK:百度地图SDK的使用
查看>>
Android studio_迁移Eclipse项目到Android studio
查看>>
JavaScript setTimeout() clearTimeout() 方法
查看>>
CSS border 属性及用border画各种图形
查看>>