当前位置:网站首页>window下socket(udp)控制台程序
window下socket(udp)控制台程序
2022-08-08 20:54:00 【三十而学】
window下socket(udp)控制台程序
- server
#include <iostream>
#include <winsock2.h>
#pragma comment(lib, "WS2_32.lib")
const unsigned int PORT = 999;
const int kBufferSize = 1024;
int main() {
WSADATA wsData;
if (WSAStartup(MAKEWORD(2, 2), &wsData) != 0) {
std::cout << "start failed" << std::endl;
return -1;
}
SOCKET s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
SOCKADDR_IN addMe,addRemote;
addMe.sin_family = AF_INET;
addMe.sin_port = htons(PORT);
addMe.sin_addr.S_un.S_addr = INADDR_ANY;//ip地址 泛指本机所有ip
int ret= bind(s, (LPSOCKADDR)&addMe, sizeof(addMe));
if (ret!= 0) {
std::cout << "bind failed" << std::endl;
return -1;
}
char cRecvBuffer[kBufferSize];
int len = sizeof(addRemote);
while (true)
{
int recv = recvfrom(s, cRecvBuffer, kBufferSize, 0, (LPSOCKADDR)&addRemote, &len);
if (recv > 0)
{
char cSendBuffer[kBufferSize];
std::cout << "Client; " << std::endl << cRecvBuffer;
if (!strcmp(cRecvBuffer,"byby"))
{
break;
}
std::cout << std::endl << "Sever: " << std::endl;
std::cin >> cSendBuffer;
sendto(s, cSendBuffer, kBufferSize, 0, (LPSOCKADDR)&addRemote, len);
}
else
{
continue;
}
}
if (WSACleanup() != 0) {
std::cout << "Clean up failed" << std::endl;
return -1;
}
return 0;
}
- client
#include <winsock2.h>
#include<WS2tcpip.h>
#include <iostream>
#pragma comment(lib, "WS2_32.lib")
const unsigned int PORT = 999;
const int kBufferSize = 1024;
int main() {
WSADATA wsData;
if (WSAStartup(MAKEWORD(2, 2), &wsData) != 0) {
std::cout << "start up failed\n" << std::endl;
return 0;
}
SOCKET s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
SOCKADDR_IN addRemote;
addRemote.sin_family = AF_INET;
addRemote.sin_port = htons(PORT);
inet_pton(AF_INET, "127.0.0.1", &addRemote.sin_addr);//ip地址转换
char cSendBuffer[kBufferSize] = "#";
int len = sizeof(addRemote);
std::cout << "Client: " << std::endl;
std::cin >> cSendBuffer;
int ret = sendto(s, cSendBuffer, kBufferSize, 0, (LPSOCKADDR)&addRemote, len);
if (ret > 0)
{
while (true)
{
char cRecvBuffer[kBufferSize];
int recv = recvfrom(s, cRecvBuffer, kBufferSize, 0, (LPSOCKADDR)&addRemote, &len);
if (recv > 0)
{
std::cout << "Server: " << std::endl << cRecvBuffer << std::endl;
if (!strcmp(cRecvBuffer,"byby"))
{
break;
}
ZeroMemory(cSendBuffer, kBufferSize);
std::cout << "Client: "<<std::endl;
std::cin >> cSendBuffer;
ret = sendto(s, cSendBuffer, kBufferSize, 0, (LPSOCKADDR)&addRemote, len);
}
else
{
continue;
}
}
}
if (WSACleanup() != 0) {
std::cout << "clean up failed\n";
return -1;
}
closesocket(s);
return 0;
}
边栏推荐
猜你喜欢
随机推荐
Kotlin实用的一些框架
Redis布隆过滤器
比较器? 如何使用比较器? 如何自定义比较器?
昇腾Ascend 随记 —— TensorFlow 模型迁移
Flask 教程 第三章:Web表单
DCT变换
单片机——串口通信(从串口接收多位数据保存到数组,发送多位数据到串口)
Kotlin Notes - Difference Between ForEach and ForEachIndexed
IO in Kotlin flow
Kotlin - learn the fifth day of the Handler
rk3588使用npu进行模型转换和推理,加速AI应用落地
Little knowledge about KotlinAndroid encounters
Use fontforge to modify font, keep only numbers
fastapi-后台任务、定时任务与消息队列
第十三届蓝桥杯(Web 应用开发)线上模拟赛【第九题】(知乎首页数据动态化)
Questions about Mac terminal custom commands and Mysql command
PHP使用glob()查找文件
究竟什么才是“云计算” | 科普好文
Bluu海鲜公司推出首批实验室培育的鱼类产品
Gradle简单到使用kotlin编写到常用命令