本次实验利用UDP协议, 语言环境为 C/C++

利用套接字Socket编程,实现Server/CLient 之间简单的通讯。

结果应为类似所示:

下面贴上代码(参考参考...)

Server 部分:

 /* UDPServer.cpp */

 #include <stdlib.h>
#include <stdio.h>
#include <winsock2.h>
#include <string.h>
#include "conio.h"
#include <time.h> #define BUFLEN 2000 // 缓冲区大小
#define WSVERS MAKEWORD(2, 2) // 指明版本2.2
#pragma comment(lib,"ws2_32.lib") // 加载winsock 2.2 Llibrary /*------------------------------------------------------------------------
* main - TCP client for DAYTIME service
*------------------------------------------------------------------------
*/
void
main(int argc, char *argv[])
{
char *host = "127.0.0.1"; /* server IP Address to connect */ char *service = ""; /* server port to connect */
struct sockaddr_in sin; /* an Internet endpoint address */
struct sockaddr_in from; /* sender address */
int fromsize = sizeof(from);
char buf[BUFLEN+]; /* buffer for one line of text */
char buf1[BUFLEN+];
SOCKET sock; /* socket descriptor */
int cc; /* recv character count */ char *pts;
time_t now; WSADATA wsadata;
WSAStartup(WSVERS, &wsadata); /* 加载winsock library,WSVERS为请求版本,wsadata返回系统实际支持的最高版本。 */
sock = socket(PF_INET, SOCK_DGRAM,IPPROTO_UDP); // 创建UDP套接字, 参数:因特网协议簇(family),数据报套接字,UDP协议号, 返回:要监听套接字的描述符或INVALID_SOCKET
memset(&sin, , sizeof(sin));
sin.sin_family = AF_INET;
sin.sin_addr.s_addr = INADDR_ANY; // 绑定(监听)所有的接口。
sin.sin_port = htons((u_short)atoi(service)); // 绑定指定接口。atoi--把ascii转化为int,htons -- 主机序(host)转化为网络序(network), 为short类型。
bind(sock, (struct sockaddr *)&sin, sizeof(sin)); // 绑定本地端口号(和本地IP地址) (void) time(&now); // 取得系统时间
pts = ctime(&now); // 把时间转换为字符串
printf(" \t UDP(Server) Echo增强程序\n\n");
while(!_kbhit()){ //检测是否有按键
flag1: cc = recvfrom(sock, buf, BUFLEN, , (SOCKADDR *)&from, &fromsize); //接收客户数据。返回结果:cc为接收的字符数,from中将包含客户IP地址和端口号。
sprintf(buf1," \t\t 时间: %s \t\t Client【IP: %s 端口号: %d 】\n \t\t 数据: %s",pts,inet_ntoa(from.sin_addr),from.sin_port,buf);
if (cc == SOCKET_ERROR){
printf("recvfrom() failed; %d\n", WSAGetLastError());
break;
}
else if (cc == )
break;
else{
buf[cc] = '\0';
printf("您收到的数据为:\n %s\n", buf1);
printf("将自动把此数据返回给 Client \n");
goto flag2;
} } flag2: cc = sendto(sock, buf1, , ,(SOCKADDR *)&from, sizeof(from));
if (cc == SOCKET_ERROR){
printf("发送失败,错误号:%d\n", WSAGetLastError());
}
else{
printf("发送成功\n");
goto flag1;
} // cc = recvfrom(sock, buf, BUFLEN, 0, (SOCKADDR *)&from, &fromsize); closesocket(sock);
GlobalFree(buf);
WSACleanup(); /* 卸载某版本的DLL */
}

Client 部分:

 /* UDPClient.cpp */

 #include <stdlib.h>
#include <stdio.h>
#include <winsock2.h>
#include <string.h>
#include <time.h> #define BUFLEN 2000 // 缓冲区大小
#define WSVERS MAKEWORD(2, 2) // 指明版本2.2
#pragma comment(lib,"ws2_32.lib") // 加载winsock 2.2 Llibrary void
main(int argc, char *argv[])
{
char *host = "127.0.0.1"; /* server IP to connect */ char *service = ""; /* server port to connect */
struct sockaddr_in toAddr; /* an Internet endpoint address */
char buf[BUFLEN+]; /* buffer for one line of text */
SOCKET sock; /* socket descriptor */
int cc; /* recv character count */
char *pts; /* pointer to time string */
time_t now; /* current time */ int toAddrsize = sizeof(toAddr); WSADATA wsadata;
WSAStartup(WSVERS, &wsadata); /* 启动某版本Socket的DLL */ sock = socket(PF_INET, SOCK_DGRAM,IPPROTO_UDP); memset(&toAddr, , sizeof(toAddr));
toAddr.sin_family = AF_INET;
toAddr.sin_port = htons((u_short)atoi(service)); //atoi:把ascii转化为int. htons:主机序(host)转化为网络序(network), s--short
toAddr.sin_addr.s_addr = inet_addr(host); //如果host为域名,需要先用函数gethostbyname把域名转化为IP地址 // memset(buf,' ',1000); //fill 1000 bytes with 'e'
buf[] = '\0';
(void) time(&now); // 取得系统时间
pts = ctime(&now); // 把时间转换为字符串
// memcpy(buf,pts,strlen(pts));
sprintf(buf,"%s ",pts);
printf(" UDP(Client) Echo增强程序\n\n");
printf(" 时间 :%s",buf); cc = sendto(sock, buf, , ,(SOCKADDR *)&toAddr, sizeof(toAddr));
flag2: if (cc == SOCKET_ERROR){
printf("发送失败,错误号:%d\n", WSAGetLastError());
}
else{
printf(" 发送成功 \n");
cc = recvfrom(sock, buf, BUFLEN, , (SOCKADDR *)&toAddr, & toAddrsize);
printf(" 您接收到的数据为:\n %s \n",buf);
printf("键入 # 继续发送,键入 @ 停止发送\n");
scanf("%s",pts);
if(pts[]=='#')
{
printf(" 请输入要发送的数据 :\n");
goto flag1;
}
if(pts[]=='@')
goto end; } flag1:
scanf("%s",pts);
sprintf(buf,"%s ",pts);
cc = sendto(sock, buf, , ,(SOCKADDR *)&toAddr, sizeof(toAddr)); goto flag2; getchar(); closesocket(sock); end: GlobalFree(buf);
WSACleanup(); /* 卸载某版本的DLL */ getchar(); }

【Echo】实验 -- 实现 C/C++下UDP, 服务器/客户端 通讯的更多相关文章

  1. 【Echo】实验 -- 实现 C/C++下TCP, 服务器/客户端 通讯

    本次实验利用TCP/IP, 语言环境为 C/C++ 利用套接字Socket编程,实现Server/CLient 之间简单的通讯. 结果应为类似所示: 下面贴上代码(参考参考...) Server 部分 ...

  2. 【Chat】实验 -- 实现 C/C++下TCP, 服务器/客户端 "多人聊天室"

    本次实验利用TCP/IP, 语言环境为 C/C++ 利用套接字Socket编程,以及线程处理, 实现Server/CLient 之间多人的聊天系统的基本功能. 结果大致如: 下面贴上代码(参考参考.. ...

  3. windows下UDP服务器和客户端的实现

      UDP是面向非连接的协议,因此在实现UDP服务器时,服务器不用总是处于监听状态.可以直接收发数据.   服务器端   1.初始化 WASStartup ( ... )   2.创建Socket s ...

  4. UDP服务器/客户端代码示例

    UDP服务器代码: #include <errno.h> #include <string.h> #include <stdlib.h> #include < ...

  5. 对Qt下对话服务器客户端的总结(MyTcpServer与MyTcpClient)

    在汇文培训老师给讲了这个例子.讲的挺好的 Qt编写聊天服务器与客户端主要用到下面两个类: QTcpSocket --- 处理连接的 QTcpServer --- 处理服务器,对接入进行响应,创建每个链 ...

  6. TCP/UDP client/server library for Java, 最好的java语言tcp udp 服务器客户端实现库

    这个库andrdoi也可以用,而且是基于类的使用方式: 它支持类似聊天室的功能,即一个人说话,所有客户端都能收到,当然也支持点点通信.它还支持 RMI 的方式调用远程过程. https://githu ...

  7. socket本地模拟UDP 服务器+客户端(三)

    UDP: TCP是建立可靠连接,并且通信双方都可以以流的形式发送数据.相对TCP,UDP则是面向无连接的协议. 使用UDP协议时,不需要建立连接,只需要知道对方的IP地址和端口号,就可以直接发数据包. ...

  8. Linux下UDP简介及程序设计

    一.UDP简介 UDP(User Datagram Protocol),用户数据报协议,是OSI参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务.UDP提供了无连接通信,且不对传 ...

  9. 【实验 1-2】编写一个简单的 UDP 服务器和 UDPP 客户端程序。程序均为控制台程序窗口。

    1.服务器 #include<winsock2.h> //包含头文件#include<stdio.h>#include<windows.h>#pragma comm ...

随机推荐

  1. 安装git出现templates not found的问题

    背景 goods.api需要在新机器上部署,该机器上没有安装git,需要安装git,查询git版本为2.4.5-1.el6 ,使用yum 一顿安装后,执行git clone命令告知warning: t ...

  2. 【12c OCP】最新CUUG OCP-071考试题库(49题)

    49.(11-1) choose the best answer Examine the structure of the SHIPMENTS table: You want to generate ...

  3. Flask_WTF升级到最新版本

    用pip $ pip install -U Flask-WTF 看熊哥的后端管理系统时候报错ImportError: cannot import name FlaskForm. 那一行的代码:from ...

  4. 解决 sublime text 3 there are no packages available for installation 错误

    重装win7 系统后,使用sublime text 3 出现下面的错误提示: 经过摸索,解决方案如下: 第一种方法: 是因为 ipv6 的问题,导致无法访问 sublime 官网,解决方法: 在 ho ...

  5. 空行会影响 Java 编译吗?

    简评:往往越简单的问题越容易被人们忽略. 问题 这个月的 Stack Overflow 有篇热门文章是国外有位开发者提出: 当我仅仅对 Java 类增加了一行空行,为什么编译后得到了两个不同的字节码文 ...

  6. multiprocess(上)

    仔细说来,multiprocess不是一个模块而是python中一个操作.管理进程的包. 之所以叫multi是取自multiple的多功能的意思,在这个包中几乎包含了和进程有关的所有子模块.由于提供的 ...

  7. 12个值得关注的顶级可视化JS库 涉及图表、动画、时间处理,表格操作

    本文是译文,原文是https://da-14.com/blog/top-11...我在原文的基础上加了百度的Echats图表库,这个也是毫不逊色其他图表库的.另外Handsontable电子表格库也是 ...

  8. mysql中字符串1.1/1.2/1.2.2/1.2.5排序问题

    1.创建查询函数:(split_pid为函数名称) create function split_pid(str varchar (1000),delimiter varchar(1)) returns ...

  9. 第三方库PIL

    第三方库PIL 一.Python简介 Python是一门简洁高效.通俗易懂的高阶动态编程语言,也可以理解成是一种面向对象的解释型计算机程序设计语言. Python具有丰富和强大的库.也经常被行内人员称 ...

  10. 生成allure测试报告之后,服务器端口无法访问查看生成的report,可能是这样引起的。

    1. 检查防火墙 2. 如果机器有安装ADsafe,请关闭adsafe后重试