计算机网络实验:UDP套接字编程

  • 一、安装实验环境
  • 二、编写程序并调试程序
  • 三、实验代码

一、安装实验环境

这次实验使用的是C/C++来编写套接字程序,可以安装DEVC++、VC6.0、CodeBlocks等,在这里我们选择CodeBlocks。下载地址:http://www.codeblocks.org/downloads/26,我们进入网址选择带MinGW环境(C语言调试环境)的程安装文件,这样我们才能运行我们的c/c++程序。

codeblocks安装完成之后,要引入libws2_32.a库,由于MinGW本身貌似没有自带libws2_32.a,可以在下面这个链接中下载链接:https://pan.baidu.com/s/1vFJUWk2czUu24YWMJJnZWA 提取码:v80g 。

下载完成后,要把这个文件解压出来放在codeblocks安装目录,MinGW的lib文件夹下面,如图

之后,打开CodeBlocks软件,选中菜单栏里面的setting下的compile,然后选中compile—>Link settings—>Add,在安装位置中找到刚刚放进去的libws2_32,然后添加,效果如下,点击OK,库的导入就完成了,此时编程的时候就可以include<winsock.h>库。

二、编写程序并调试程序

分别创建client和server两个工程,将代码复制到对应的程序中去。

然后编译并运行,这个时候,代码如果没有问题的话将会在程序的目录下生成exe文件。这时要注意,在软件里面不能同时运行两个exe文件,这个时候我们就要找到你对应的c/c++程序的目录下面的exe文件然后打开并运行他们。如果你不知道你的创建程序的位置在哪儿了不要紧,在你的程序这里鼠标右键选择properties,在general里面就可以看到你程序的在计算机中的位置了
然后我们到这个位置下去,然后找到bin目录–>debug,就可以看到exe文件了,然后就可以运行它,图中演示的是找到client的exe文件,server.exe也是同理。

然后,我们运行他们,出现两个窗口,一个是客户端的,一个是服务器的,然后奇妙的事情就发生了,可以在两边进行神奇的对话了。

三、实验代码

下面是代码(带有详细注释)

//服务器代码
#include <stdio.h>
#include <winsock2.h>#pragma comment(lib, "ws2_32.lib")int main(int argc, char* argv[])
{WSADATA wsaData;WORD sockVersion = MAKEWORD(2,2); //指定加载2.2版本if(WSAStartup(sockVersion,&wsaData)!= 0)    //该函数执行成功后返回0。则如果不成功的话return 0,程序终止{return 0;}SOCKET serSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);//创建套接字,AF_INET表示IPV4地址族,SOCK_DGRAM表示数据包套接字,IPPROTO_UDP说明支持的是UDP协议if(serSocket == INVALID_SOCKET)  {//创建的套接字非法printf("socket error !");return 0;}sockaddr_in serAddr;serAddr.sin_family = AF_INET;  //设置地址族为IPV4serAddr.sin_port = htons(8888);    //设置端口号为8888serAddr.sin_addr.S_un.S_addr = INADDR_ANY; //设置IP地址为INADDR_ANYif(bind(serSocket, (sockaddr *)&serAddr, sizeof(serAddr)) == SOCKET_ERROR) //将一个Socket绑定到特定的IP地址和端口上{printf("bind error !");closesocket(serSocket);return 0;//绑定失败,输出"bind error"程序结束}sockaddr_in remoteAddr;int nAddrLen = sizeof(remoteAddr);char recvData[255]; //用来接收数据的字符数组char sentData[255]; //用来发送数据的字符数组while (true){int ret = recvfrom(serSocket, recvData, 255, 0, (sockaddr *)&remoteAddr, &nAddrLen);    //从特定的socket地址接受数据,成功则返回实际传送出去的字符数,失败返回-1if (ret > 0){recvData[ret] = 0x00;printf("接受到一个连接:%s \r\n", inet_ntoa(remoteAddr.sin_addr));if(strcmp(recvData,"666")==0){//退出printf("\n开始退出\n");closesocket(serSocket); //关闭通信WSACleanup();return 0;}printf(recvData);}printf("\n请输入要发送的数据.\n");gets(sentData);   //读入一行字符串sendto(serSocket, sentData, strlen(sentData), 0, (sockaddr *)&remoteAddr, nAddrLen);//从特定的socket地址接受发送,成功则返回接收到的字符数,失败则返回-1}
}
//客户端代码
#include <stdio.h>
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")
int main(int argc, char* argv[])
{WORD socketVersion = MAKEWORD(2,2);     //指定加载2.2版本WSADATA wsaData;if(WSAStartup(socketVersion,&wsaData)!= 0){return 0;}SOCKET sclient = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);//创建套接字sockaddr_in sin;sin.sin_family = AF_INET;   //设置地址族为IPV4sin.sin_port = htons(8888); //设置端口号为8888sin.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");  //设置IP地址为127.0.0.1int len = sizeof(sin);  //说明地址信息的长度char sentData[255]; //发送数据的存放位置,字符数组char recvData[255]; //接收数据的存放位置,字符数组while (1){printf("\n请输入传给服务器的数据,以666结束.\n");gets(sentData);//若两个字符串相等为0,否则为非0if(strcmp(sentData,"666")!=0){printf("开始发送数据\n");//不是结束标识sendto(sclient, sentData, strlen(sentData), 0, (sockaddr *)&sin, len);//发送完数据,规定开始接受数据int ret = recvfrom(sclient, recvData, 255, 0, (sockaddr *)&sin, &len);if(ret > 0){//打印接收的数据recvData[ret] = 0x00;printf(recvData);}}else{//退出strcpy(sentData,"666");sendto(sclient, sentData, strlen(sentData), 0, (sockaddr *)&sin, len);closesocket(sclient);WSACleanup();return 0;}}
}

最后实验还要求服务器将客户端发送的数据经大小写转换后,重新发回客户端,在这里提供一下将一个字符串进行大小写转换的一种方式。

#include <iostream>
#include <string.h>using namespace std;int main()
{char recvData[255];cout<<"Please input a string:";gets(recvData);for( int i = 0 ; i < strlen(recvData) ; i++){if(recvData[i] >= 'a' && recvData[i] <= 'z'){recvData[i] = recvData[i] - 32;}else if(recvData[i] >= 'A' && recvData[i] <= 'Z'){recvData[i] = recvData[i] + 32;}}cout << recvData << endl;return 0;
}

计算机网络实验:UDP套接字编程相关推荐

  1. 西南科技大学-计算机网络实验-TCP套接字编程

    服务端: #include <winsock2.h> #include <stdio.h> #include <string.h> #pragma comment( ...

  2. 计算机网络实验二:UDP套接字编程实现多人聊天

    一.实验目的 1. 实现一个能够在局域网中进行点对点聊天的实用程序. 2. 熟悉c++.Java等高级编程语言网络编程的基本操作. 3. 基本了解对话框应用程序的编写过程. 4. 实现UDP套接字编程 ...

  3. 计网实验原理-TCP/UDP套接字编程

    计算机网络自顶向下结构--第7版 第二章实验,套接字编程 代码运行环境:window10,python 3.8.对于书上代码略作修改. 进程与计算机网络之间的接口 多数应用程序是由通信进程队组成的,每 ...

  4. Linux IPv6 UDP套接字编程示例

    udp ipv6套接字编程和ipv4接口类似,参数略有不同,流程都包括创建套接字.绑定地址.发送等. 下面是一个udp ipv6 demo, 包括创建ipv6套接字.绑定地址和发送数据等. 首先先在l ...

  5. linux udp套接字编程获取报文源地址和源端口(二)

    之前项目中涉及udp套接字编程,其中一个要求是获取客户端发过来报文的端口和ip地址,功能很简单,只是对这一块不很熟.之前使用的方法是通过调用recvmsg这个接口,并通过参数msg里面的msg_nam ...

  6. TCP和UDP套接字编程

    一.Socket简单介绍 如果要在应用层调用传输层的服务,进行相关程序的设计,就要涉及到套接字编程.套接字也称之为Socket,本质上它就是利用传输层提供的一系列Api来进行网络应用程序的设计. 网络 ...

  7. 网络编程---TCP/UDP套接字编程原理

    本篇介绍的是Linux下的网络编程,故有些接口是不适用于Windows的,但是具体概念和实现方法是大体一致的 本篇重在讲解原理,具体实现请戳这里->UDP套接字编程实现 介绍 网络编程套接字(s ...

  8. UDP套接字编程——Python语言描述

    首先,回顾一下.在我们使用Socket编程之前的一些网络的概念. IP:它是用来标识处于Internet之中的端系统的. MAC:它是用于在同一局域网中标识不同的计算机的. 端口号:它是用来标识同一台 ...

  9. 【Linux网络编程】UDP 套接字编程

    [Linux网络编程]UDP 套接字编程 [1]用户数据报协议(UDP) UDP是一个简单的传输层协议,不保证UDP数据报会到达其最终目的地,不保证各个数据报的先后顺序跨网络后保持不变,也不保证每个数 ...

最新文章

  1. golang NewRequest gorequest 实现http请求
  2. jQuery 序列化表单数据 serialize() serializeArray()
  3. 笔记-高项案例题-2019年下-质量管理-帕累托分析
  4. 近期有哪些值得读的QA论文?| 专题论文解读
  5. java中对集合操作的易错点01
  6. 洛谷 - P3254 圆桌问题(最大流+路径打印)
  7. ORB-SLAM2中MapPoints的描述子的计算
  8. Codeforces Round #624 (Div. 3) D. Three Integers 数论
  9. linux标准I/O——格式化输出
  10. 使用telephonymanager真机调试 闪退_watchOS 上的一次 SKView 内存泄露调试
  11. 4.2.#{}和${}的用法
  12. mysql服务设置远程连接 解决1251 client does not support ..问题
  13. 在WPF中,x:Name和Name属性之间有什么区别?
  14. BZOJ2658 ZJOI2012 小蓝的好友(treap)
  15. Spring AOP原理分析(三)-- AnnotationAwareAspectJAutoProxyCreator#initBeanFactory()源码
  16. python3打造专属的下载软件
  17. 【仪器常用操作方法】33500B函数发生器常用操作方法
  18. 09-01-28 自助装机
  19. 2018.6清北学堂day3上午笔记
  20. 【网络安全】入侵防御系统

热门文章

  1. gitlab 删除项目
  2. 写两个线程,一个线程打印 1~ 52,另一个线程打印A~Z, 打印顺序是12A34B...5152Z;
  3. 第5课 布尔表达式
  4. c语言机构体,枚举,宏
  5. mysql group 更新递增_MySQL Group Replication在网易使用和优化实践
  6. 题目:八进制转换为十进制
  7. 【汇正财经】什么是证券监管?
  8. HLOJ434 关灯
  9. 一起学AI:核心基础概念
  10. BnAuth PC版战网验证器