TCP-socket(2)
来源:互联网 发布:ubuntu安装mac os 编辑:程序博客网 时间:2024/06/01 19:36
Server.cpp
// server.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <Winsock2.h>#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); //创建socketif(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 <Winsock2.h>#pragma comment(lib,"ws2_32.lib")#include <stdio.h>#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); //创建socketif(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); //接收recvrevData[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进行数据分段发送,运行结果:
第一次请求:
服务器
客户端
第二次请求:
0 0
- TCP-socket(2)
- Socket-TCP-2
- java TCP socket编程2
- TCP socket
- socket tcp
- socket TCP
- TCP Socket
- socket TCP
- TCP Socket
- TCP-socket
- TCP socket
- tcp socket
- TCP SOCKET
- socket/tcp
- tcp socket
- TCP Socket
- TCP socket
- socket(TCP)
- Oracle自定义编码规则
- SQL优化-索引
- CodeForces 375A Divisible By Seven
- 【Android进阶学习】shape和selector的结合使用
- MFC- ActiveX编程(孙鑫C++第十八讲笔记整理 )
- TCP-socket(2)
- position属性absolute与relative 详解
- EXT Grid中添加人民币符号
- 如何利用QQ营销的方法将用户圈起来?
- 链表栈实现
- 20131225孤独者之旅14
- SQL CREATE TABLE 语句
- FFmpeg and x264 Encoding Guide(英文)
- .gitignore