UDP网络聊天实验
南邮通信技术实验报告实验一

南京邮电大学通达学院课程实验报告题目: IP网络中的TCP-UDP通信实验学院通达学院学生姓名王伟慧班级学号 10005002指导教师王珺开课学院通信与信息工程学院日期 2013.5一,实验目的了解局域网TCP消息通信过程的机制;1,了解局域网UDP消息通信过程的特点;2,熟悉最简单的Socket类的操作和使用;3,实现字符串通信、文件(ASCII文件)传输、Socket局域网电话的实现;二实验设备及软件环境答:一台或两台装有VC++的带有网卡的PC机(或工控机)。
服务器端10.10.9.210.10.9.3710.10.9.1510.10.9.1三实验步骤内容一:基于TCP协议的Socket消息发送和接收说明:事例程序包括“TCP聊天服务器”与“TCP聊天客户端”。
1,运行示例程序“TCP聊天服务器”设置端口号:1001,2,点击“服务器开启服务”3,运行示例程序“TCP聊天客户端”,设置端口号一定要与“TCP聊天服务器”设置的一致。
如果在同一台机器上运行,输入服务器IP地址:127.0.0.1,如果不在同一台机器上,输入局域网上服务器所在机器的IP地址(当然首先确保局域网通畅)4,点击“连接”在客户端输入文字消息,可以看到服务器端能显示出客户机的名称、IP地址、以及通过Socket消息发送过来的文字内容。
内容二,基于UDP的SOCKET消息1,(必须是在两台机器上,说明书上示意为10.10.9.37和10.10.9.15两个IP 地址)均运行程序“UDP客户端”,运行界面如图1.5,注意此时已经没有明确的“服务器”“客户端”之说,“服务器名”输入对端IP地址,端口号必须一致。
2,分别点击“打开端口”,连接上服务器后,可以互发消息四.实验内容及实验结果TCP通信UDP通信五.实验体会实验过程中,虽然有很多的困难,但经过老师和同学的知道,最终都顺利解决了,实验之后,对TCP、UDP的通信连接有了更加深刻的认识,增长了有关通信技术方面的知识,对以后的学习生活,都会有很大的帮助。
仿QQ聊天简单的UDP传输实例

仿QQ聊天简单的UDP传输实例来西安八天了,一直忙做一个B/S系统,通过网站控制视频距阵来切换摄像头和红外报警.最后搞定了,把一些思路和大家分享下.完成此功能的技术要点就是UDP协议传输, UDP传输的得大的一个特点就是个无连接协议,传输数据之前源端和终端不建立连接,当UDP它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。
在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在接收端,UDP 把每个消息段放在队列中,应用程序每次从队列中读一个消息段。
看到这大家想想QQ聊天就可以更好的理解,QQ聊天就是用UDP传输的. 以下通过java代码来简单的实现一个简单的通讯首先创建一个客户端public class UDPClient {private static final int PORT = 5000; //注意这个,这个是服务的端口private DatagramSocket dataSocket;private DatagramPacket dataPacket;private byte sendDataByte[];private String sendStr;public UDPClient() {Init();}public void Init() {try {// 指定端口号,避免与其他应用程序发生冲突dataSocket = new DatagramSocket(PORT+1); //因为是在本机测试,所以端口会冲突,我就加了一个1。
如果有单独的服务器即去掉sendDataByte = new byte[1024];sendStr = "UDP方式发送数据"; //这里是重点就是转输数据。
一般要控制硬件,就要传一点指令过去如:FFAADDFFsendDataByte = sendStr.getBytes(); // 这里也是重点,就是把字符转换成byte 结合项目需要,自己写方法转换dataPacket = new DatagramPacket(sendDataByte, sendDataByte.length,InetAddress.getByName("localhost"), PORT);dataSocket.send(dataPacket);} catch (SocketException se) {se.printStackTrace();} catch (IOException ie) {ie.printStackTrace();}}public static void main(String args[]) {new UDPClient();}}然后创建服务器import java.io.IOException;import .*;public class UDPServer {private static final int PORT = 5000;private DatagramSocket dataSocket;private DatagramPacket dataPacket;private byte receiveByte[];private String receiveStr;public UDPServer() throws IOException {Init();}public void Init() throws IOException {dataSocket = new DatagramSocket(PORT);receiveByte = new byte[1024];dataPacket = new DatagramPacket(receiveByte, receiveByte.length);receiveStr = "";int i = 0;while (i == 0) { // 无数据,则循环dataSocket.receive(dataPacket);i = dataPacket.getLength();// 接收数据if (i > 0) {// 指定接收到数据的长度,可使接收数据正常显示,开始时很容易忽略这一点receiveStr = new String(receiveByte, 0, dataPacket.getLength());System.out.println("客户传过来的数字"+receiveStr);i = 0;// 循环接收}}}public static void main(String args[]) throws IOException {new UDPServer();}}测试,首先启动服务程序,然后运行客户端就可以测试效果了。
有关TCPUDP的使用例子

有关TCPUDP的使用例子TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)是网络通信中常用的两种传输协议。
它们在应用层之下的传输层提供了不同的传输方式和特性。
下面是关于TCP和UDP的使用例子。
1.聊天应用程序TCP协议适用于需要可靠传输的应用场景,比如聊天应用程序。
用户在手机或电脑上运行聊天应用程序,发送聊天信息给其他用户。
TCP协议确保信息按照发送的顺序接收,并且在传输过程中不会受到丢包或乱序的影响。
每个聊天消息的发送和接收都通过TCP连接完成,确保信息的可靠传输。
2.文件传输TCP协议也适用于大文件传输。
例如,用户需要通过互联网将大型文件发送给其他用户。
TCP协议保证了文件在传输过程中的完整性和准确性。
它会自动检测和纠正丢失或损坏的数据包,并确保接收方和发送方之间的数据一致性。
这种方式适用于需要确保每个数据包都到达的场景,尽管传输速度可能稍慢。
3.实时流媒体UDP协议适用于实时流媒体应用程序,如在线直播或在线游戏。
UDP提供了更低的延迟和更快的传输速率,但不提供像TCP那样的可靠性和顺序性。
在直播或游戏中,用户希望能快速看到视频或游戏画面,而不必要求每个数据包都到达和按顺序排列。
这样,UDP协议的特性更适合这类应用场景。
4.DNS(域名系统)DNS是将域名解析为IP地址的系统。
UDP协议通常用于DNS查询,因为它是一种简单的请求-响应协议。
当用户在浏览器中输入一个域名时,DNS解析请求将通过UDP协议发送到DNS服务器。
UDP快速地将请求传递给服务器,并且不需要进行复杂的连接设置,因为DNS查询通常是短暂而频繁的交互。
5.游戏中的多播UDP也可以用于多播(Multicast)应用,其中一台计算机可以将数据包发送给多个接收者。
在在线游戏中,UDP协议可用于将游戏状态信息快速广播给所有玩家。
多播可以减少网络流量,因为只有一次广播就可以到达多个接收者,而不是向每个接收者发送单独的数据包。
计算机毕业设计85UDP局域网QQ聊天程序设计说明书

摘要随着网络技术的发展及人们生活的需求,网络聊天已越来越受到人们的青睐。
网络聊天已经成为人们工作生活中传递信息、交流感情的重要工具,给人们带来了很大的方便。
本设计开发的是一个局域网QQ聊天软件,运用软件工程的设计流程,使用现在比较普遍和流行的C#语言,采用面向对象的方法,综合运用数据库编程技术、多线程开发技术、网络通讯技术,以Microsoft Visual Studio 2005作为系统前台应用程序开发工具,Microsoft SQL Server 2000作为后台数据库管理系统,在Windows XP平台下进行开发。
本局域网QQ聊天软件采用服务器端/客户端(C/S)模式。
客户端采用UDP与服务器连接,客户端之间也是通过UDP互相通讯。
服务器端主要用于开启和关闭UDP协议的监听服务,还可以查看局域网内已注册的所有的用户以及他们的在线状态。
客户端分为注册窗口、登录窗口、QQ窗体主界面以及聊天界面。
服务器端要先开启监听服务,客户端才可以进行登录,然后才可以与其他登录的在线用户进行文本信息的聊天,还可以进行点对点的语音聊天,视频聊天和文件传输,还可以进行拍照和录像等。
此外,还对该软件进行了皮肤的加载以及打包成安装源。
该软件运行稳定,界面美观、操作简便。
在局域网内部使用该局域网QQ聊天软件,可以方便人与人之间的沟通、交流;可以大大提高企业的工作效率;拉近人与人之间的关系。
关键词:局域网;聊天软件;客户端;服务器端;UDP协议AbstractWith the development of networking technology and the living demand of people, chatting on network is more and more acceptable by people. Internet chat has become an important tool to transmission of information and exchange of feelings in our life, it brings a great convenience.The topic of this paper is going to talk about that to develop the local area network QQ chat software. This local area network chat software using the design stream of the software project, using the C# language which is very common and popular, using the object-oriented approach, the technology of the database programming, multi-threading development technology and the network communication technology, makes Microsoft Visual Studio 2005 as the front application design tool, Microsoft SQL Server 2000 are used as the background DBMS( the database management system ), and it was programmed in the Windows XP System.The local area network QQ chat software uses the server and client (C/S) mechanism. And the client connects the server using UDP, and they communicate each other by UDP. Server-side is mainly used to open and close the UDP protocol monitoring service, and you can also look over all the registered users and their online status whom in the local area network. Client is divided into registration window, the login window, the main QQ form and the chat form. If the client wants to log in, the server monitoring service must first open the listening service, then the client can chat with the others which have already logged, and also can voice chat, video chat and files transfers, and also can take pictures and videos. In addition, the software has been load the beautiful skin and package into the installation source.This software has an interface aesthetics, stable operation, simple operation. Using QQ software in the LAN internal can help people to communicate with others easily, can greatly improve the efficiency of the enterprises, close relationships between people.Key Words: Local Area Network; Chat Software; Client; Server-side; UDP protocol目录引言 (1)1系统概述与需求分析 (2)1.1 系统概述 (2)1.2 需求分析 (2)1.2.1功能需求 (3)1.2.2性能需求 (3)1.3 可行性分析 (4)2 系统总体设计 (5)2.1 相关开发技术的原理性说明 (5) Framework和C# (5)2.1.2SQL Server 2005 (6)2.1.3UDP协议简介 (6)2.1.4Socket简介 (6)2.2 系统功能结构 (7)2.3 业务流程图 (8)2.4 程序运行环境 (8)3 数据库以及类库的详细设计与实现 (9)3.1 数据库的创建 (9)3.1.1数据库分析 (9)3.1.2数据库创建 (9)3.1.3数据库概念设计 (9)3.1.4数据库逻辑结构设计 (9)3.1.5文件夹组织结构 (10)3.2 类库的设计 (10)4 客户端模块的详细设计及实现 (12)4.1客户端注册模块的设计 (12)4.1.1客户端注册模块概述 (12)4.1.2客户端注册模块技术分析 (13)4.1.3客户端注册模块实现过程 (13)4.2 客户端登陆模块设计 (14)4.2.1客户端登陆模块概述 (14)4.2.2客户端登陆模块技术分析 (14)4.2.3客户端登陆模块实现过程 (14)4.3 客户端QQ模块设计 (15)4.3.1客户端QQ模块概述 (15)4.3.2客户端QQ模块技术分析 (15)4.3.3客户端QQ模块实现过程 (16)4.4 客户端消息发送模块设计 (17)4.4.1客户端消息发送模块概述 (17)4.4.2客户端消息发送模块技术分析 (18)4.4.3客户端消息发送模块实现过程 (18)5 服务器端模块的详细设计与实现 (23)5.1 服务器端控制台窗体概述 (23)5.2 服务器端控制台窗体技术分析 (23)5.3 服务器端控制台窗体实现过程 (23)6 系统特色及关键技术 (24)7 结论 (25)谢辞 (28)参考文献 (29)附录 (30)引言在Internet飞速发展的今天,互联网成为人们快速获取、发布和传递信息的重要渠道,它在人们政治、经济、生活等各个方面发挥着重要的作用。
cudp聊天程序课程设计

c udp聊天程序课程设计一、课程目标知识目标:1. 学生能理解UDP协议的工作原理和特点,掌握UDP编程的基本方法;2. 学生能运用C语言实现简单的UDP聊天程序,了解网络编程中的数据传输和接收过程;3. 学生了解网络通信中IP地址、端口号等基本概念,并掌握其在编程中的应用。
技能目标:1. 学生能够独立编写和调试C语言UDP聊天程序,具备基本的网络编程能力;2. 学生能够分析并解决网络编程过程中遇到的问题,具备问题解决能力;3. 学生能够通过实际操作,提高编程实践能力和团队协作能力。
情感态度价值观目标:1. 学生通过学习UDP聊天程序的制作,培养对网络编程的兴趣和热情;2. 学生在编程实践中,学会克服困难,培养坚持不懈、勇于探索的精神;3. 学生通过团队协作,培养良好的沟通能力和团队合作精神。
分析课程性质、学生特点和教学要求,本课程将目标分解为以下具体学习成果:1. 学生能够掌握UDP协议的基本原理,并能够运用C语言实现简单的网络通信;2. 学生能够独立编写和调试UDP聊天程序,具备基本的网络编程能力;3. 学生能够在课程实践中,培养良好的编程习惯和团队合作精神。
二、教学内容1. UDP协议原理:介绍UDP协议的特点、工作原理及其在网络通信中的应用,关联课本第三章第二节。
2. C语言网络编程基础:回顾C语言的基本语法,重点讲解socket编程、数据类型转换等在网络编程中的应用,关联课本第四章。
3. UDP聊天程序设计:详细讲解UDP聊天程序的设计思路、步骤及关键代码实现,包括以下内容:- 创建UDP套接字;- 绑定IP地址和端口号;- 发送和接收数据;- 关闭套接字。
关联课本第五章第三节。
4. 编程实践:安排学生进行UDP聊天程序的编写和调试,分为以下阶段:- 阶段一:实现UDP套接字的创建、绑定和关闭;- 阶段二:实现数据的发送和接收;- 阶段三:优化程序,处理异常情况,提高程序的稳定性和用户体验。
udp编程实例

udp编程实例UDP编程实例UDP(User Datagram Protocol)是一种无连接的传输协议,它不保证数据传输的可靠性,但是传输速度快,适用于一些对数据可靠性要求不高但是对传输速度要求较高的场景,比如视频直播、在线游戏等。
本文将介绍一个基于UDP协议的简单聊天程序的实现。
我们需要了解UDP协议的一些特点。
UDP协议不像TCP协议一样需要建立连接,因此在发送数据时不需要先建立连接,直接发送即可。
但是由于UDP协议不保证数据传输的可靠性,因此在发送数据时需要注意数据的完整性和正确性。
接下来,我们来实现一个简单的UDP聊天程序。
首先,我们需要创建两个程序,一个用于发送消息,一个用于接收消息。
发送消息的程序如下:```pythonimport socket# 创建UDP套接字s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 目标地址和端口号target_addr = ('127.0.0.1', 8888)while True:# 输入消息message = input('请输入消息:')# 发送消息s.sendto(message.encode(), target_addr)# 如果输入exit,则退出程序if message == 'exit':break# 关闭套接字s.close()```接收消息的程序如下:```pythonimport socket# 创建UDP套接字s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 绑定本地地址和端口号local_addr = ('127.0.0.1', 8888)s.bind(local_addr)while True:# 接收消息data, addr = s.recvfrom(1024)# 输出消息print('收到来自{}的消息:{}'.format(addr, data.decode()))# 如果收到exit,则退出程序if data.decode() == 'exit':break# 关闭套接字s.close()```在运行程序之前,需要先启动接收消息的程序,然后再启动发送消息的程序。
java实现的基于UDP的聊天系统课设报告

沈阳理工大学课程设计专用纸课程设计任务书目录1 协议介绍和使用说明 (2)1.1 协议内容 (2)1.2 关键技术 (3)1.2.1 服务器端Socket的实现 (3)1.2.2 通信的建立 (4)2 程序设计 (4)2.1系统结构 (4)2.2主程序设计 (5)2.2.1 服务器端程序 (5)2.2.2 客户端程序 (5)2.3.2客户端之间发送消息 (6)2.4.2 界面的功能 (7)2.5 实现代码 (7)2.6 程序调试及运行结果 (12)2.6.1 调试前的准备 (12)2.6.2 程序调试过程 (12)2.6.3 程序运行结果 (12)2.6.4 出错分析 (14)3. 课设体会 (15)参考文献 (15)1 协议介绍和使用说明1.1 协议内容本课程设计主要是基于UDP的并用Java实现的简单的聊天程序。
UDP 用户数据报是在运输层的端到端抽象的逻辑信道中传送的。
UDP 在传送数据之前不需要先建立连接。
对方的运输层在收到UDP 报文后,不需要给出任何确认。
虽然UDP 不提供可靠交付,但在某些情况下UDP 是一种最有效的工作方式。
虽然UDP 用户数据报只能提供不可靠的交付,但UDP 在某些方面有其特殊的优点,它有即时通信的功能。
比如说,使用聊天程序聊天的时候,省去的了跟对方通信的时候的链接的麻烦,直接进行通信。
UDP 只在IP 的数据报服务之上增加了很少一点的功能,即端口的功能和差错检测的功能。
UDP 使用尽最大努力交付,即不保证可靠交付,同时也不使用拥塞控制。
UDP 是面向报文的。
UDP 没有拥塞控制,很适合多媒体通信的要求。
UDP 支持一对一、一对多、多对一和多对多的交互通信。
发送方UDP 对应用程序交下来的报文,在添加首部后就向下交付IP 层。
UDP 对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。
应用层交给UDP 多长的报文,UDP 就照样发送,即一次发送一个报文。
协议分析udp实验报告

协议分析udp实验报告
本次实验旨在通过对UDP(User Datagram Protocol)协议的分析,深入了解其工作原理、特点及应用,并学习使用Wireshark工具进行协议分析。
实验步骤:
1. 实验前准备:
a. 搭建实验环境,包括安装Wireshark工具、配置网络连接等;
b. 确定实验所使用的网络拓扑结构,包括发送端和接收端的IP地址、端口号等。
2. 实验过程:
a. 启动Wireshark并选择相应的网络接口进行监听;
b. 在发送端发送UDP数据包到指定的接收端;
c. 使用Wireshark工具分析捕获到的数据包,并观察UDP协议的工作过程。
3. 实验结果分析:
a. Wireshark捕获到的数据包中可以看到UDP的相关信息,包括源端口号、目的端口号、校验和等;
b. UDP协议是一种无连接的协议,因此不需要建立和断开连接,不会进行握手和挥手过程;
c. UDP协议是一种不可靠的协议,不具备传输可靠性和顺序性的功能,但传输速度快;
d. UDP协议可以实现一对一、一对多、多对多等多种数据传输方式;
e. UDP协议适用于对实时性要求较高、数据传输量较小且要求速度较快的应用场景,如音视频传输、网络游戏等。
4. 实验总结:
通过本次实验,我们了解了UDP协议的工作原理和特点,并学会了使用Wireshark工具进行协议分析。
UDP协议具有无连接、不可靠、速度快等特点,适用于对实时性要求较高的应用场景。
在实际应用中,我们应根据具体的需求和情况选择合适的协议进行数据传输。
另外,通过协议分析可以帮助我们深入理解网络协议的工作机制,提高网络技术的应用能力。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机网络原理实验报告UDP网络聊天程序设计班级:计算机1301班学号:1307010116姓名:席凤凯实验五 UDP网络聊天程序设计一.实验目的:编程设计基于 UDP 的简单聊天室程序,实现服务器与客户端之间的对话通信功能。
二.实验原理:网络编程一般都是基于 TCP 或 UDP 的,一般过程如下:(1)TCP 编程的服务器端与客户端一般步骤:服务器端:1、创建一个 socket,用函数 socket();2、绑定 IP 地址、端口等信息到 socket 上,用函数 bind();3、开启监听,用函数 listen();4、接收客户端上来的连接,用函数 accept();5、收发数据,用函数 send()和 recv(),或者 read()和 write();6、关闭网络连接;7、关闭监听;客户端:1、创建一个 socket,用函数 socket();2、设置要连接的对方的 IP 地址和端口等属性;3、连接服务器,用函数 connect();4、收发数据,用函数 send()和 recv(),或者 read()和 write();5、关闭网络连接;(2) UDP 编程步骤如下:服务器端:1、创建一个 socket,用函数 socket();2、绑定 IP 地址、端口等信息到 socket 上,用函数 bind();3、循环接收数据,用函数 recvfrom();4、关闭网络连接;客户端:1、创建一个 socket,用函数 socket();2、设置对方的 IP 地址和端口等属性;3、发送数据,用函数 sendto();4、关闭网络连接;三.实验内容:编辑代码:(1)服务器源程序:#include <stdio.h> 标准输入输出头文件#include <netinet/in.h> 互联网地址族#include <arpa/inet.h> LINUX 下 C 语言程序的 INTERNET 定义头文件#include <unistd.h> 符号常量#include <fcntl.h> 文件控制#include <sys/stat.h> 文件状态#include <sys/types.h> 基本系统数据类型#include <sys/socket.h> 套接字接口#define LOCALPORT 4567//定义本地服务器端口int main(int argc,char *argv[]){int s,len;struct sockaddr_in addr;int addr_len;char msg[256];int i=0;// 编写一个函数用来初始化套接字和绑定套接字。
//初始化套接字。
socket 参数第一个是网络套接字族。
一般都是 AF_INET。
//第二个参数是套接字类型。
TCP 的是 SOCK_STREAM。
//而 UDP 的是 SOCK_DGRAM 的形式。
//第三个是初始化的协议。
一般都是 0。
if (( s= socket(AF_INET, SOCK_DGRAM, 0) )<0){perror("error");exit(1);}else{printf("socket created .\n");printf("socked id: %d \n",s);printf("remote port: %d \n",LOCALPORT);//创建成功后输出信息。
}len=sizeof(struct sockaddr_in);bzero(&addr,sizeof(addr));addr.sin_family=AF_INET; //地址家族。
addr.sin_port=htons(LOCALPORT); //端口。
这个 port 是自己申明的变量,一般自己申明的端口号要大于 1024。
addr.sin_addr.s_addr=htonl(INADDR_ANY);//地址是一个结构体。
用 htonl 把它转化为网络字节序。
if(bind(s,(struct sockaddr *)&addr,sizeof(addr))<0){perror("connect...");exit(1);}else{printf("bind ok. \n");printf("local port:%d \n",LOCALPORT);}//绑定套接字。
while (1){bzero(msg,sizeof(msg));len =sizeof(struct sockaddr_in);//因为我们是用 UDP 的方式。
所以我们这里用 recvform 来接收数据。
若是 TCP 则采用 recv。
//recvform 的参数。
第一是套接字,第二个是你要接收的字符缓冲区。
//第三个是缓冲区大小。
第四个是标记我们设为 0 就好。
//第五个参数是接收对方地址。
第六个是地址长度。
if ((i=recvfrom(s,msg,sizeof(msg),0,(struct sockaddr *)&addr,&len))==-1) { printf("error receiving! \n");exit(1);}if(!strcmp("quit\n", msg)) //如果收到“ quit”,表示客户端要结束聊天。
{sendto(s,msg,sizeof(msg),0,(struct sockaddr *)&addr,len);printf("Chat end!\n"); //服务器发送“ quit”并结束,输出 Chat end!。
break;}printf("The mseeage you recving is:%s \n",msg);sendto(s,msg,sizeof(msg),0,(struct sockaddr *)&addr,len);}}(2)客户端源代码:#include <stdio.h>#include <netinet/in.h>#include <arpa/inet.h>#include <unistd.h>#include <fcntl.h>#include <sys/stat.h>#include <sys/types.h>#include <sys/socket.h>#define REMOTEPORT 4567 //直接定义连接服务器端口。
#define REMOTEIP "127.0.0.1"int main(int argc,char *argv[]){int s,len;struct sockaddr_in addr;int addr_len;char msg[256];int i=0;//定义套接字并初始化,建立成功则输出信息。
if (( s= socket(AF_INET, SOCK_DGRAM, 0) )<0){perror("error");exit(1);}else{printf("socket created .\n");printf("socked id: %d \n",s);printf("remote ip: %s \n",REMOTEIP);printf("remote port: %d \n",REMOTEPORT);}len=sizeof(struct sockaddr_in);bzero(&addr,sizeof(addr));addr.sin_family=AF_INET;addr.sin_port=htons(REMOTEPORT);addr.sin_addr.s_addr=inet_addr(REMOTEIP);while (1){bzero(msg,sizeof(msg));len = read(STDIN_FILENO,msg,sizeof(msg));if((sendto(s,msg,sizeof(msg),0,&addr,sizeof(addr)))<0) { perror("send message worry!");exit(1);}printf("send message is:%s\n",msg) ;}}四.实验结果截图:五.修改后的代码(修改后可以是自己输入端口号和ip号)客户端代码:#include <stdio.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <errno.h>#include <netdb.h> /*包括结构hostent(主机环境),获得主机信息的几个函数*/int main(int argc,char *argv[]){printf("=======================================\n");printf("= client =\n");printf("=======================================\n");int sockfd,new_fd;struct sockaddr_in server_addr;struct hostent *host;int nbytes,portnumber;char buffer[1024];if (argc!=3){fprintf(stderr,"Usage:%s hostname portnumber \a\n",argv[0]);exit(1);}//获得服务器地址if ((host=gethostbyname(argv[1]))==NULL){fprintf(stderr,"HostName Erro!");exit(1);}if ((portnumber=atoi(argv[2]))<0){fprintf(stderr,"Usage:%s hostname portnumber \a\n",argv[0]);exit(1);}//建立客户端Sockfd描述符if ((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1){fprintf(stderr,"Socket error:%s \a\n",strerror(errno));exit(1);}//调用函数connect之前,需要指定服务器进程的套接字地址//填充sockaddr结构bzero(&server_addr,sizeof (struct sockaddr_in));server_addr.sin_family=AF_INET;server_addr.sin_port=htons(portnumber);// server_addr.sin_addr= *((struct in_addr *) host->h_addr);//发起连接请求与远程服务器建立一个连接if (connect(sockfd,(struct sockaddr *)(&server_addr),sizeof (struct sockaddr))==-1){fprintf(stderr,"Bind error:%s \a\n",strerror(errno));exit(1);}//进行读写数据操作,将数据显示到标准输出上if ((nbytes=read(sockfd,buffer,1024))==-1){fprintf(stderr,"Read error: %s \n",strerror(errno));exit(1);}buffer[nbytes]='\\';printf("收到: %s \n",buffer);//结束通信//关闭连接close(sockfd);exit(0);}服务端代码:#include <stdio.h> //标准输入输出头文件#include <sys/socket.h> //与套接字相关的函数声明和结构定义#include <netinet/in.h> //某些结构体声明、宏定义#include <arpa/inet.h> //某些函数声明#include <errno.h> //查看错误代码/*以上为包含必要的头文件,其中几个头文件是几乎每一个网络程序所必需的,如<sys/socket.h>,<netinet/in.h>等*/int main(int argc,char *argv[]){printf("=======================================\n");printf("= server =\n");printf("=======================================\n");int sockfd,new_fd;struct sockaddr_in server_addr;struct sockaddr_in client_addr;int sin_size,portnumber;char hello[]="Hello, The Network! This is my first Server.\n";if (argc!=2){fprintf(stderr,"Usage:%s portnumber \a\n",argv[0]);exit(1); //程序出现错误结束}if ((portnumber=atoi(argv[1]))<0){fprintf(stderr,"Usage:%s portnumber \a\n",argv[0]);exit(1);} //atoi()将字符型转化为整型//建立socket描述符(intnet协议簇,流套接字,使用默认协议)if ((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1){fprintf(stderr,"Socket error:%s \a\n",strerror(errno));exit(1);}//填充服务器的套接字地址结构sockaddrbzero(&server_addr,sizeof (struct sockaddr_in));server_addr.sin_family=AF_INET;server_addr.sin_addr.s_addr=htonl(INADDR_ANY);server_addr.sin_port=htons(portnumber);//开始捆绑sockfd描述符if (bind(sockfd,(struct sockaddr *)(&server_addr),sizeof (struct sockaddr))==-1){fprintf(stderr,"Bind error:%s \a\n",strerror(errno));exit(1);}//监听sockfd描述符if (listen(sockfd,5)==-1){//fprintf(stderr,"Listen error:%s \a\n",strerror(errno));exit(1);}while(1) {//阻塞服务器,直到客户程序建立连接sin_size=sizeof (struct sockaddr_in);if ((new_fd=accept(sockfd,(structsockaddr*)(&client_addr),&sin_size))==-1){//fprintf(stderr,"Accept error:%s \a\n",strerror(errno));exit(1);}fprintf(stderr,"Server get connectionfrom %s :\n",inet_ntoa(client_addr.sin_addr));if (write(new_fd,hello,strlen(hello))==-1){//fprintf(stderr,"Write error:%s \a\n",strerror(errno));exit(1);}//通信结束,继续循环执行close(new_fd);/*当服务器处理完这个客户机请求后,关闭连接套接字*/}//关闭监听套接字描述符close(sockfd);exit(0);}六.实验总结:因为一开始没能接触过网络编程所以一开始并不知道网络编程的原理,所以上手的比较慢,后来在实验中慢慢了解并且有C语言的基础,所以看懂代码是没什么问题。