Winsock.简单UDP
PS:vs2017 编译C++代码 支持 XP:项目属性-->链接器-->系统-->需要的最小版本--> 输入 "5.1"
1、ZC:测试:c向s 发送长度为0的数据,是可行的。(1)用s和c都在本机 测试,OK (2)用 冬的HP笔记本 和 我的联想小新笔记本 测试,OK
2、测试代码:
// SampleUDP_01.cpp : This file contains the 'main' function. Program execution begins and ends there.
// #define _CRT_SECURE_NO_WARNINGS
#define _WINSOCK_DEPRECATED_NO_WARNINGS #include <iostream> int main1();
int main2(); int main(int _argc, char** _argv)
{
std::cout << "Hello World!\n"; if (_argc <= )
{
printf("Command line no parameter .");
return ;
} printf("%s\n", _argv[]);
if (_argv[][] == 's')
main1();
else if (_argv[][] == 'c')
main2();
else
printf("Unknown command line parameter : %s\n", _argv[]); return ;
} #include <stdio.h>
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")
#define PORT 8888 int main1()
{
WSADATA wsaData;
int Ret = WSAStartup(MAKEWORD(, ), &wsaData);
printf("Server!\n");
if (Ret != )
{
printf("无法初始化winsock.\n");
WSACleanup();
}
else { // printf("初始化winsock成功\n");
} if (LOBYTE(wsaData.wVersion) != ||
HIBYTE(wsaData.wVersion) != )
{
WSACleanup();
return ;
} SOCKET socket = ::socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);
sockaddr_in addr;
addr.sin_addr.S_un.S_addr = INADDR_ANY;
addr.sin_family = AF_INET;
addr.sin_port = ntohs(PORT); if (socket == INVALID_SOCKET)
{
printf("socket Error!");
}
int rs = bind(socket, (sockaddr*)&addr, sizeof(addr)); if (rs != )
{
printf("bind failed!");
return ;
}
char buf[] = "\0";
char temp[] = "\0";
sockaddr_in addrcl;
int len = sizeof(sockaddr); while () { int iRecv = recvfrom(socket, buf, sizeof(buf), , (sockaddr*)&addrcl, &len);//用新建的地址结构保存客户端的信息 if (iRecv == )
{
printf("recvfrom len : %d\n", iRecv);
break;
} sprintf(temp, "%s:%s", inet_ntoa(addrcl.sin_addr), buf);
sendto(socket, temp, strlen(temp) + , , (sockaddr*)&addrcl, sizeof(addr));
if (strcmp(buf, "srvexit") == )
{
break;
}
printf("%s", buf);
}
closesocket(socket); WSACleanup();
printf("exit\n");
return ;
} #include <WinSock2.h>
#include <stdio.h>
#define PORT 8888
int main2()
{
WSADATA wsaData;
int Ret = WSAStartup(MAKEWORD(, ), &wsaData);
printf("Client..!\n");
if (Ret != )
{
printf("无法初始化winsock.\n");
WSACleanup();
}
else { // printf("初始化winsock成功\n");
} SOCKET socketc = ::socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);
sockaddr_in addr;
//addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
addr.sin_addr.S_un.S_addr = inet_addr("192.168.2.102");
addr.sin_family = AF_INET;
addr.sin_port = ntohs(PORT); if (socketc == INVALID_SOCKET)
{
printf("socket Error!");
} int len = sizeof(sockaddr); while ()//client
{
char buf[] = "\0";
char rbuf[] = "\0";
printf("\n:");
scanf("%s", &buf);
//sendto(socketc, buf, strlen(buf) + 1, 0, (SOCKADDR*)&addr, len);//用回原来的地址结构
sendto(socketc, buf, , , (SOCKADDR*)&addr, len);//用回原来的地址结构
break; recvfrom(socketc, rbuf, sizeof(rbuf), , (SOCKADDR*)&addr, &len);
if (strcmp(rbuf, "exit") == )
{
break;
}
printf("%s", rbuf); } closesocket(socketc);
WSACleanup();
printf("end\n");
return ;
}
3、vs2017 编译C++代码 支持 XP
4、
5、
Winsock.简单UDP的更多相关文章
- Java 简单UDP通信
Java手册 java.net Class DatagramSocket java.lang.Object java.net.DatagramSocket All Implemented Interf ...
- Winsock.简单TCP
PS:vs2017 编译C++代码 支持 XP:项目属性-->链接器-->系统-->需要的最小版本--> 输入 "5.1" 1.ZC:测试:c向s 发送长度 ...
- 简单 UDP 操作类
using System; using System.Collections.Generic; using System.Text; using System.Net; using System.Ne ...
- c# 实现简单udp数据的发送和接收
服务端代码 static void Main(string[] args) { UdpClient client = null; string receiveString = null; byte[] ...
- Netty实现简单UDP服务器
本文参考<Netty权威指南> 文件列表: ├── ChineseProverbClientHandler.java ├── ChineseProverbClient.java ├── C ...
- Winsock 示例
#include "stdafx.h" #include <Windows.h> #include <iostream> #pragma comment(l ...
- 【JAVA网络流之TCP与UDP 】
一.ServerSocket java.lang.Object |-java.net.ServerSocket 有子类SSLServerSocket. 此类实现服务器套接字.服务器套接字等待请求通过网 ...
- Tcp/Ip协议族简单解读及网络数据包/报/帧数据格式及封装及解包;
http://www.creseek.cn/products-install/install_on_bsd_linux/ 中文检索 离线cloudera ecosystem components: h ...
- UDP通讯协议
常见的通讯协议有udp和tcp. 先来简单了解一下这两个协议各自的特点: UDP: --将数据及源.目的封装在数据包中,不需要建立连接: --每个数据包的大小限制在64k以内: --因无连接,是不可靠 ...
随机推荐
- 汇编语言笔记 CALL和RET指令
转载地址:http://www.cnblogs.com/dennisOne ☞模块化程序设计 模块化程序设计 汇编语言通过call和ret指令实现了模块化程序设计.可以实现多个相互联系.功能独立的子程 ...
- Luogu P3810 【模板】三维偏序(陌上花开) CDQ分治 树状数组
https://www.luogu.org/problemnew/show/P3810 复习板子,重要的题就真的要写三遍???之前写过一篇博客了,不过之前写的那个板子的sort用的规则真是沙雕 #in ...
- Python3OS文件/方法
Python3OS文件/方法 os模块提供了非常丰富的方法用来处理文件和目录. 方法 描述 os.access(path,mode) 检验权限模式 os.chdir(path) 改变当前工作目录 os ...
- Prometheus Consul实现自动服务发现
Prometheus Consul实现自动服务发现 1.概述 Consul 是一个支持多数据中心分布式高可用的服务发现和配置共享的服务软件. Consul 由 HashiCorp公司用Go语言开发 ...
- 对okhttp参数的一些思考
背景 项目中使用OkHttp访问三方服务 参数 创建okhttp客户端类的时候需要设置一些参数,有些可能是坑,仅供参考: client = new OkHttpClient.Builder() .di ...
- 记录vsCode配置node开发环境
环境:win10,idea:vscode 1:安装Visual Studio Code 下一步下一步.(很早之前就安装了). 2:安装node. http://nodejs.cn/download/ ...
- 服务器部署docker
docker简介 可以把docker是一个容器,可以让开发者将自己的项目部署到这个容器中,最常用的场景是将自己的后端项目部署到服务器的时候会将其打入docker镜像中,可以理解为一个开销更小的虚拟机. ...
- Jar hell问题以及解放方法
当一个类或一个资源文件存在多个jar中,就好存在jar hell问题 可以通过以下代码来诊断问题:
- getLocation 需要在 app.json 中声明 Permission 字段
小程序开发中,清除授权状态后,重新编译,提示:getLocation 需要在 app.json 中声明 Permission 字段 需要在 app.json 里面增加 permission 属性配置( ...
- Qt--core模块概述
QtCore模块是所有其它Qt模块的基础,包含以下核心功能: Qt Data Types:数据类型Qt Object Model:对象模型(包括元对象模型.属性系统.信号与槽机制.对象树)Input/ ...