#include<WinSock2.h>//头文件
#include<stdbool.h>
#include<stdio.h>
#include<iostream>
#pragma comment(lib, "ws2_32.lib")//库文件
#pragma warning(disable:4996)
#define err(errMsg) printf("[error] %s failed,code %d \
line:%d\n ",errMsg,WSAGetLastError(),__LINE__)
#define PORT 8888 //0~1024一般不用
using namespace std;
long g_fileSzie;
char* g_fileBuf;
bool init_Socket()//初始化网络库
{
WSADATA wsadata;
if (0 != WSAStartup(MAKEWORD(2, 2), &wsadata))//windows异步套接字启动
{
printf("[error]WSAStarup failed,code %d\n", WSAGetLastError());
return false;
}
return true;
}
bool close_Socket()//关闭网络库
{
if (0 != WSACleanup())
{
printf("[error]WSACleanup failed,code %d", WSAGetLastError());
return false;
}
return true;
}
SOCKET create_serverSocket()
{
SOCKET fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//创建一个空的socket
if (INVALID_SOCKET == fd)
{
printf("[error]socket failed,code %d", WSAGetLastError());
return INVALID_SOCKET;
}
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(PORT);//把本地字节序转换为网络字节序
addr.sin_addr.S_un.S_addr = ADDR_ANY;//绑定本地任意IP
if (SOCKET_ERROR == bind(fd, (struct sockaddr*)&addr, sizeof(addr)))
{
printf("[error]bind failed,code %d", WSAGetLastError());
return INVALID_SOCKET;//-1
}
listen(fd, 10);
return fd;
}
int main()
{
int send_len ;
int recv_len ;//定义长度变量
int len ;
char send_buf[100] = { '\0' };
char recv_buf[100] = { '\0' };//定义发送缓冲区和接受缓冲区
init_Socket();
SOCKET serfd = create_serverSocket();
printf("服务端创建成功,等待客户端连接\n ");
SOCKET clifd = accept(serfd, NULL, NULL);//s_accept = accept(s_server, (SOCKADDR*)&accept_addr, &len);
while (true)
{
if (clifd == INVALID_SOCKET)
{
printf("[error]accept failed,code %d", WSAGetLastError());
closesocket(clifd);
closesocket(serfd);
close_Socket();
return 0;
}
printf("客户端连接成功\n");
while (true)
{
if (SOCKET_ERROR == recv(clifd, recv_buf, sizeof(recv_buf), 0))//recv_len = recv(s_accept, recv_buf, 100, 0);
{
printf("[error] failed,code %d", WSAGetLastError());
}
else
{
printf("客户端信息:%s\n", recv_buf);
}
if (strcmp(recv_buf, "bye") == 0)
{ //断开通信
cout << "本次通信结束!" << endl;
break;
}
cout << "请输入回复信息:\0";
cin >> send_buf;
send_len = send(clifd, send_buf, sizeof(send_buf), 0);
if (send_len < 0)
{
cout << "发送失败!" << endl;
break;
}
}
break;
}
closesocket(clifd);
closesocket(serfd);
close_Socket();
return 0;
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
在客户端与服务端进行信息交互的时候,我们经常想让他们进行实时对话,下面我将给出客户端与服务器实时通信的代码,采用C语言与C++混合编写,基于tcp协议,键盘输入想发送的数据,接收到数据之后,对数据进行解析。老规矩,让我们开始初始化套接字。 1.server端 在main函数中, 新建一个套接字clifd来发送数据,注意在send函数中填入的套接字是接收连接时accept新建的,而不是初始化用到那个套接字serfd,server端先接收客户端发来的消息,再对消息进行回应,运行程序时,自己在输出框填入想发送的数据即可。 2.cilent端 在main函数中,我们先发送消息到服务器,因为实际的项目中,基本上都是客户端先向服务器发送请求,然后再开始接收消息,当客户端发出“bye”时,我们的通信就结束了
资源详情
资源评论
资源推荐
收起资源包目录
socketTcp.rar (2个子文件)
socketTcp
cilent.cpp 2KB
server.cpp 3KB
共 2 条
- 1
卑微搬砖中
- 粉丝: 95
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0