#include<stdio.h>
#include<WINSOCK2.H>
#include<string.h>
#include<iphlpapi.h>
#pragma comment(lib,"WS2_32.lib")
#define BUFFER_SIZE 1024 //缓冲区大小
#define _WINSOCK_DEPRECATED_NO_WARNINGS
int main(){
WSADATA WSAData;
SOCKET s_Host;//本机socket
sockaddr_in addrServer;//服务器地址
char buf[BUFFER_SIZE]; //缓冲区字符数组
int return_info;//存储返回的错误代码
clock_t start, finish;
double duration;
if (WSAStartup(MAKEWORD(2, 2), &WSAData) != 0){ //初始化Winsock2.2
printf("无法完成初始化,错误代码:%d", WSAGetLastError());
WSACleanup();
return 0;
}
s_Host = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); //创建监听的socket; AF_INET:IPv4 Internet协议;
//SOCK_STREAM:Tcp连接,提供序列化的、可靠的、双向连接的字节流。支持带外数据传输
//IPPROTO_TCP:协议编号
if (s_Host == INVALID_SOCKET){
printf("创建sockets失败,错误代码:%d\n", WSAGetLastError());
WSACleanup(); //清除初始化的Winsock
return -1;
}
addrServer.sin_family = AF_INET;
addrServer.sin_port = htons(9990);
addrServer.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//本机地址
return_info = connect(s_Host, (sockaddr*)&addrServer, sizeof(addrServer));//s_Host:标识一个套接字。
//addrServer:套接字s想要连接的主机地址和端口号。
//第三个参数表示缓冲区的长度。
if (SOCKET_ERROR == return_info){
printf("连接服务器失败,错误代码:%d", WSAGetLastError());
closesocket(s_Host);
WSACleanup();
return -1;
}
//循环给服务器发送消息
while (1){
//printf("请输入要发送的消息 : ");
//客户端套接字,接受消息
return_info = recv(s_Host, buf, sizeof(buf), 0); //recv()函数返回接收到的字节数,如果服务器端没有发送数据,则会阻塞到此处
start = clock();
if (return_info == SOCKET_ERROR) {
printf("接受服务器消息失败, 错误代码:%d", WSAGetLastError());
closesocket(s_Host);
WSACleanup();
return -1;
}
else {
buf[return_info] = '\0';
}
if (strcmp(buf, "1") == 0) {
int list[10] = { 300,300,330,300,330,300,330,300,330,300 };
char buff[BUFFER_SIZE];
memset(buff, 0x00, 255);
memcpy(buff, list, sizeof(list));
//发送
//send函数的第一个参数指定发送端套接字描述符;(s_Host:本机套接字,绑定的是服务器的ip和端口。)
//第二个参数指明一个存放应用程序要发送数据的缓冲区;
//第三个参数指明实际要发送的数据的字节数;第四个参数一般置0。
return_info = send(s_Host, buff, strlen(buff), 0); //服务器端如果没有足够的缓冲区接受信息,则线程会阻塞到此处
if (return_info == SOCKET_ERROR) {
printf("发送消息失败,错误代码:%d", WSAGetLastError());
closesocket(s_Host);//// 清理该套接口的资源
WSACleanup();//// 清理Winsocket资源
return -1;
}
}
else if (strcmp(buf, "2") == 0) {
//阻塞(挂起)
continue;
}
else if (strcmp(buf, "3") == 0) {
//彻底结束程序运行
break;
}
}
if (WSACleanup() == SOCKET_ERROR) {
printf("WSACleanUp出错!!!");
} //做一些清除工作
system("pause");
return 0;
}
没有合适的资源?快使用搜索试试~ 我知道了~
C++编写的TCP客户端,传输一个整数数组
共24个文件
tlog:6个
pdb:3个
idb:2个
需积分: 46 32 下载量 74 浏览量
2018-11-25
14:50:38
上传
评论 3
收藏 25.76MB ZIP 举报
温馨提示
自己使用的Tcp客户端,因为工作学习需要学习的,把涉及私人项目的东西都删掉了,只留下一个代码框架,实现的功能是实现TCP客户端和服务器端传输一个数组以及指令。适合有需要的同学学习,也可以直接拿来用。
资源推荐
资源详情
资源评论
收起资源包目录
MyTCPClient.zip (24个子文件)
MyTCPClient
MyTCPClient.VC.db 39.48MB
.vs
MyTCPClient
v14
.suo 41KB
Debug
MyTCPClient.ilk 335KB
MyTCPClient.exe 38KB
MyTCPClient.pdb 884KB
MyTCPClient.v12.suo 21KB
MyTCPClient.sdf 30.5MB
MyTCPClient.sln 979B
MyTCPClient
sClient.cpp 3KB
Debug
vc120.pdb 180KB
MyTCPClient.log 717B
vc140.pdb 188KB
MyTCPClient.tlog
CL.write.1.tlog 456B
MyTCPClient.lastbuildstate 194B
link.command.1.tlog 2KB
CL.read.1.tlog 23KB
link.write.1.tlog 428B
cl.command.1.tlog 1KB
link.read.1.tlog 3KB
vc120.idb 555KB
sClient.obj 33KB
vc140.idb 587KB
MyTCPClient.vcxproj 4KB
MyTCPClient.vcxproj.filters 948B
共 24 条
- 1
资源评论
暴风少年
- 粉丝: 80
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功