当前位置:网站首页>Under the Windows socket (TCP) console program
Under the Windows socket (TCP) console program
2022-08-08 21:03:00 【Thirty to learn】
window下socket(TCP)控制台程序
Create two console projects,利用套接字,Understand the workflow of sockets
- server端
#include<iostream>
#include <winsock2.h>
using namespace std;
#pragma comment(lib,"ws2_32.lib") //链接库
int main(int argc, char* argv[])
{
//初始化网络环境
WORD sockVersion = MAKEWORD(2, 2);//socket版本
WSADATA wsaData;
if (WSAStartup(sockVersion, &wsaData) != 0)
{
return 0;
}
//创建listen套接字
SOCKET slisten = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//协议;指定socket类型;指定协议
if (slisten == INVALID_SOCKET)
{
printf("socket error !");
return 0;
}
//绑定IP和端口
sockaddr_in sin;
sin.sin_family = AF_INET;//协议
sin.sin_port = htons(999);//端口
sin.sin_addr.S_un.S_addr = INADDR_ANY;//ip地址 Refers to all of the machineip
if (bind(slisten, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR)
{
printf("bind error !");
}
//开始监听
if (listen(slisten, 5) == SOCKET_ERROR)
{
printf("listen error !");
return 0;
}
//循环接收数据
SOCKET sClient;
sockaddr_in remoteAddr;
int nAddrlen = sizeof(remoteAddr);
char revData[1024];
while (true)
{
printf("listen...\n");
sClient = accept(slisten, (SOCKADDR*)&remoteAddr, &nAddrlen);//The last two parameters are returned by the client respectivelyinternet地址
if (sClient == INVALID_SOCKET)
{
printf("accept error !");
continue;//接收失败,Loop again waiting for a connection
}
//接收数据
int ret = recv(sClient, revData, 255, 0);
if (ret > 0)
{
revData[ret] = 0x00;
cout << revData;
}
//发送数据
const char* sendData = "server:connected right\n";
send(sClient, sendData, strlen(sendData), 0);
closesocket(sClient);//Close the current client socket when the session is complete
}
closesocket(slisten);
WSACleanup();//Clean up the network environment
return 0;
}
- client端
#include <winsock2.h>
#include <WS2tcpip.h>
#include<iostream>
#include<string>
using namespace std;
#pragma comment(lib, "ws2_32.lib")
int main()
{
WORD sockVersion = MAKEWORD(2, 2);
WSADATA data;
if (WSAStartup(sockVersion, &data) != 0)
{
return 0;
}
sockaddr_in serAddr;
serAddr.sin_family = AF_INET;
serAddr.sin_port = htons(999);
inet_pton(AF_INET, "127.0.0.1", &serAddr.sin_addr);//ip地址转换
printf("print a string to connect the sever\n");
string CONNECT;
while (cin>>CONNECT)
{
SOCKET sclient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sclient == INVALID_SOCKET)
{
printf("invalid socket!");
return 0;
}
if (connect(sclient, (sockaddr*)&serAddr, sizeof(serAddr)) == SOCKET_ERROR)
{
//连接失败
printf("connect error !");
closesocket(sclient);
return 0;
}
send(sclient, "client: connect request\n", strlen("client: connect request\n"), 0);
char recData[255];
int ret = recv(sclient, recData, 255, 0);
if (ret > 0) {
recData[ret] = 0x00;
printf(recData);
}
closesocket(sclient);
}
WSACleanup();
return 0;
}
基于vs2019,Start multiple projects under the same solution at the same time.
边栏推荐
猜你喜欢
单片机——DHT11 温湿度传感器
昇腾Ascend 随记 —— TensorFlow 模型迁移
目标检测论文 Precise detection of Chinese characters in historical documents with DRL
编译原理——词法分析程序(C#)
手机投影到deepin
Questions about Mac terminal custom commands and Mysql command
Centos安装Redis --使用wget
[highcharts application - double pie chart]
阿里云祝顺民:算力网络架构的新探索
GeoServer Getting Started Learning: 06-Publishing Multi-level TIF Map Data
随机推荐
fastapi-实战-综述
Flask 教程 第八章:粉丝
Flask 教程 第四章:数据库
The new database is online | CnOpenData information transmission, software and information technology service industry basic information data of industrial and commercial registered enterprises
ssh 登录connectction reset by peer
图像噪声水平估计INLE_paper
amd和Intel的CPU到底哪个好?
【idea_取消自动import .*】
【时间戳转普通时间格式的方法】
【导出PDF-项目应用】
Bluu Seafood launches first lab-grown fish products
rancher坑记录
【浏览器打开导出的excel】
【highcharts应用-双饼图】
关于Mac终端自定义命令和Mysql命令问题
Mysql管理指令
【项目经验】--环保项目
Kotlin annotations
Centos安装Redis --使用wget
磁控胶囊胃镜:具有良好耐受性的非侵入性胃镜检查