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以内: --因无连接,是不可靠 ...
随机推荐
- Ubuntu 系统安装ssh的命令
更新源列表 打开"终端窗口",输入"sudo apt-get update"-->回车-->"输入当前登录用户的管理员密码"-- ...
- leetcode解题报告(29):Student Attendance Record I
描述 You are given a string representing an attendance record for a student. The record only contains ...
- SpringMVC返回结果值处理器之返回一个值
处理器一共分为两类: 一类是返回到一个页面,凡是返回页面的处理器,一定会刷新页面,对应的请求应该是同步请求. 一类是返回结果,凡是返回结果的处理器,一定是请求方需要得到这个结果值,此时就需要一个有回调 ...
- fluent当中的梯度宏和VOF梯度的获取【转载】
1 FLUENT变量梯度宏 C_R_G C_P_G C_U_G C_V_G C_W_G C_T_G C_H_G C_YI_G C_R_RG C_P_RG C_U_RG C_V_RG C_W_RG C_ ...
- 【转】Linux 利用 PROMPT_COMMAND 实现审计功能
linux历史命令记录在history,在用户退出的时候写入,不过有时候可以直接绕过去,不让写入,比如shutdown now,还有在一些情况下也是不予保存的,这让人很头疼 使用PROMPT_COMM ...
- Check if List<Int32> values are consecutive
Check if List<Int32> values are consecutive One-liner, only iterates until the first non-conse ...
- python 获取自己exe位置 sys.executable sys.prefix
exe路径 >>> sys.executable 'C:\\Python27\\python.exe' 1 2 lib路径 >>> sys.prefix 'C:\\ ...
- (信贷风控八)行为评分卡模型(B卡)的介绍
python信用评分卡建模(附代码,博主录制) https://study.163.com/course/introduction.htm?courseId=1005214003&utm_ca ...
- Mac 打开、编辑 .bash_profile 文件
export PATH=${PATH}:/Users/loaderman/Library/Android/sdk/platform-tools export PATH=${PATH}:/Users/l ...
- postgresql 臭氧8小时聚合函数
1.定义数据拼接函数 CREATE OR REPLACE FUNCTION "public"."sfun"("results" _numer ...