当前位置:网站首页>Socket (udp) console program under window
Socket (udp) console program under window
2022-08-08 21:03:00 【Thirty to learn】
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;
}
边栏推荐
- 【JVM内存区域】
- 最简单的idea构建微服务模块
- The new database is online | CnOpenData information transmission, software and information technology service industry basic information data of industrial and commercial registered enterprises
- 关于Mac终端自定义命令和Mysql命令问题
- 简单Swing界面笔记
- rancher -部署
- 【转发与重定向(二)】
- 【带信息的Excel模板下载】
- Process实现守护线程
- Introduction to GeoServer: 01-Introduction
猜你喜欢
随机推荐
简单Swing界面笔记
【时间戳转普通时间格式的方法】
SQL注入之搭建dnslog
单片机——DHT11 温湿度传感器
Kotlin委托属性知识点
使用fontforge修改字体,只保留数字
【读代码重构有感】
Jenkins下载安装
go基于泛型实现继承
用固态U盘让你的办公环境随身移动
GeoServer入门学习:02-安装部署
【线性代数04】投影矩阵P和标准正交矩阵Q
C#实现Everything——UI与查询 附源码
[Oracle's NVL function usage]
keras调用load_model时报错ValueError: Unknown layer:*解决办法
charles简单使用
Kotlin实用的一些框架
阿里云祝顺民:算力网络架构的新探索
澳洲ABM创新模式将销售代理权给到个体,让利消费者
The first day of a solid foundation for Kotlin