网络编程——基于TCP协议的Socket编程,基于UDP协议的Socket编程

Socket编程

目前较为流行的网络编程模型是客户机/服务器通信模式

客户进程向服务器进程发出要求某种服务的请求,服务器进程响应该请求。如图所示,通常,一个服务器进程会同时为多个客户端进程服务,图中服务器进程B1同时为客户进程A1、A2和B2提供服务。

Socket概述

①   所谓Socket通常也称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过“套接字”向网络发出请求或者应答网络请求。

②   Socket是连接运行在网络上的两个程序间的双向通信的端点。

③   网络通讯其实指的就是Socket间的通讯。

④   通讯的两端都有Socket,数据在两个Socket之间通过IO来进行传输。

使用Socket进行网络通信的过程

①   服务器程序将一个套接字绑定到一个特定的端口,并通过此套接字等待和监听客户的连接请求。

②   客户程序根据服务器程序所在的主机和端口号发出连接请求。

③   如果一切正常,服务器接受连接请求。并获得一个新的绑定到不同端口地址的套接字。

④   客户和服务器通过读、写套接字进行通讯。

基于TCP协议的Socket编程

①   创建TCP服务端步骤:

a)         创建一个ServerSocket对象

b)         调用accept()方法接受客户端请求

c)         从Socket中获取I/O流

d)         对I/O流进行读写操作,完成与客户端的交互

e)         关闭I/O流和Socket

②   创建TCP客户端步骤:

a)         创建一个Socket对象

b)         从Socket中获取I/O流

c)         对I/O流进行读写操作,完成与服务端的交互

d)         关闭I/O流和Socket

注:客户端和服务端进行数据传输时,客户端的输入流对应服务端的输出流,客户端的输出流对应服务端的输入流。

示例:创建一个客户端与服务端通信的例子

包名:com.iotek.tcpsocket

服务端:

 1         // 1.创建一个ServerSocket对象
 2         ServerSocket serverSocket = new ServerSocket(8888);
 3         // 2.调用accept()方法接受客户端请求
 4         Socket socket = serverSocket.accept();
 5         System.out.println(socket.getInetAddress().getHostAddress() + "连接成功");
 6         // 3.获取socket对象的输入输出流
 7         BufferedReader br = new BufferedReader(new InputStreamReader(
 8                 socket.getInputStream()));
 9
10         PrintWriter pw = new PrintWriter(socket.getOutputStream(), true);
11         String line = null;
12         // 读取客户端传过来的数据
13         while ((line = br.readLine()) != null) {
14             if (line.equals("over")) {
15                 break;
16             }
17             System.out.println(line);
18             pw.println(line.toUpperCase());
19         }
20
21         pw.close();
22         br.close();
23         socket.close();
24         System.out.println(socket.getInetAddress().getHostAddress() + "断开连接");

客户端:

 1         Socket socket = new Socket("127.0.0.1", 8888);
 2         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
 3
 4         PrintWriter pw = new PrintWriter(socket.getOutputStream(), true);
 5         BufferedReader reader = new BufferedReader(new InputStreamReader(
 6                 socket.getInputStream()));
 7         while (true) {
 8             String line = br.readLine();// 获取键盘所输入的字符串
 9             pw.println(line);
10             if (line.equals("over")) {
11                 break;
12             }
13             System.out.println(reader.readLine());// 获取服务端传过来的大写字符串
14         }
15         reader.close();
16         br.close();
17         pw.close();
18         socket.close();

为了更直观的看见通信过程,将2个java程序复制到E盘根目录下,用命令行的形式来运行。

打开cmd,编译java,步骤

① 进入e盘。  e:

② 编译所有java文件。 javac –d . *.java

③ 打开服务端。    java com.iotek.tcpsocket.TCPServer

④ 再打开一个cmd命令行用于打开客户端java com.iotek.tcpsocket.TCPClient

连接成功

在客户端输入hello回车之后测试成功。

输入over,断开连接

基于UDP协议的Socket编程

① 创建发送端

a)     建立DatagramSocket对象。该端点建立,系统会随机分配一个端口。如果不想随机配置,可以手动指定。

b)     将数据进行packet包的封装,必须要指定目的地地址和端口。

c)     通过socket服务的send方法将该包发出。

d)     将socket关闭。

② 创建接收端

a)     建立DatagramSocket对象。要监听一个端口。

b)     通过socket的receive方法将数据存入数据包中。

c)     通过数据包dp的方法getData()、getAddress()、getPort()等方法获取包中的指定信息。

d)     将socket关闭。

示例:创建一个发送与接收的例子

发送端:UDPDemo1

 1         DatagramSocket socket = new DatagramSocket();
 2         String str = "i love you";
 3         // 把数据进行封装到数据报包中
 4         DatagramPacket packet = new DatagramPacket(str.getBytes(),
 5                 str.length(), InetAddress.getByName("localhost"), 6666);
 6         socket.send(packet);// 发送
 7
 8         byte[] buff = new byte[100];
 9         DatagramPacket packet2 = new DatagramPacket(buff, 100);
10         socket.receive(packet2);
11         System.out.println(new String(buff, 0, packet2.getLength()));
12         socket.close();

接收端:UDPDemo2

 1         // 先接收数据
 2         DatagramSocket socket = new DatagramSocket(6666);
 3         byte[] buff = new byte[100];
 4         DatagramPacket packet = new DatagramPacket(buff, 100);
 5         socket.receive(packet);// 接受传来的数据包
 6         System.out.println(new String(buff, 0, packet.getLength()));
 7
 8         // 发送数据
 9         String str = "me too";
10         DatagramPacket packet2 = new DatagramPacket(str.getBytes(),
11                 str.length(), packet.getAddress(), packet.getPort());
12         socket.send(packet2);
13         socket.close();

将2个java程序复制到E盘根目录下,用命令行的形式来运行。

打开cmd,编译java,步骤:

① 进入e盘。  e:

②   编译以UDP开头的文件。 javac –d . UDP*.java

③   先运行接收端。  java com.iotek.tcpsocket.UDPDemo2

④   重新打开一个命令行,运行发送端。  java com.iotek.tcpsocket.UDPDemo1

时间: 2024-12-09 23:06:08

网络编程——基于TCP协议的Socket编程,基于UDP协议的Socket编程的相关文章

[深入浅出WP8.1(Runtime)]Socket编程之UDP协议

13.3 Socket编程之UDP协议 UDP协议和TCP协议都是Socket编程的协议,但是与TCP协议不同,UDP协议并不提供超时重传,出错重传等功能,也就是说其是不可靠的协议.UDP适用于一次只传送少量数据.对可靠性要求不高的应用环境.既然 UDP 是一种不可靠的网络协议,那么还有什么使用价值或必要呢?其实不然,在有些情况下UDP协议可能会变得非常有用.因为UDP具有TCP所望尘莫及的速度优势.虽然TCP协议中植入了各种安全保障功能,但是在实际执行的过程中会占用大量的系统开销,无疑使速度受

TCP/IP详解学习笔记--UDP协议

UDP协议基本介绍 1.基本概念 UDP是一个简单的面向数据包的运输层协议:进程的每一个输出操作都正好产生一个UDP数据报,并组装成一个待发送的IP数据报,与流字符协议不同,如TCP,应用程序产生的全体数据与真正发送的单个IP数据报没有联系,UDP提供不可靠的服务,它的数据报格式如下图所示 UDP数据报 IP首部 UDP首部 UDP数据 2.UDP首部 16位源端口号 16位目的端口号 16位UDP长度 16位UDP校验和 数据 数据 端口号表示发送进程和接收进程,TCP端口号与UDP端口号是相

网络编程—网络基础概览、socket,TCP/UDP协议

网络基础概览 socket概览 socket模块-TCP/UDP的实现 TCP/UDP总结 网络基础概览 osi七层协议各层主要的协议 # 物理层传输电信号1010101010 # 数据链路层,以太网协议,arp协议.对这些信号进行分组,同时规范了分组形式--以太网协议,头部是mac地址中间是信息, # 网络层:ip协议,arp协议帮忙找到mac地址,ip,子网掩码,网关(下面有一些简单概括) # 传输层:tcp协议,udp协议 # (socket)就是一组接口,将复杂的tcp协议和udp协议隐

网络编程(四)——基于udp协议的套接字socket、socketserver模块的使用

基于udp协议的套接字.socketserver模块 一.UDP协议(数据报协议) 1.何为udp协议 不可靠传输,"报头"部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包. 以太网头 ip头                      udp头                            数据                                            tcp协议(流式协议) 2.udp协议的特点 (1)传输数据以数据报的形

java学习--基础知识进阶第十二天--网络编程概述、UDP协议、TCP协议

今日内容介绍 u  网络编程概述 u  UDP u  TCP 第1章 网络编程概述 1.1 网络协议 通过计算机网络可以使多台计算机实现连接,位于同一个网络中的计算机在进行连接和通信时需要遵守一定的规则,这就好比在道路中行驶的汽车一定要遵守交通规则一样.在计算机网络中,这些连接和通信的规则被称为网络通信协议,它对数据的传输格式.传输速率.传输步骤等做了统一规定,通信双方必须同时遵守才能完成数据交换. 网络通信协议有很多种,目前应用最广泛的是TCP/IP协议(Transmission Contro

Java 网络编程 UDP协议

网络编程 TCP/IP协议:多台计算机网络连接的规则 包括:TCP协议.IP协议.UDP协议和其它协议的协议组 层次结构: 链路层:链路层是用于定义物理传输通道,通常是对某些网络连接设备的驱动协议,例如针对光纤.网线提供的驱动.硬件方面的 网络层:网络层是整个TCP/IP协议的核心,它主要用于将传输的数据进行分组,将分组数据发送到目标计算机或者网络. 传输层:主要使网络程序进行通信,在进行网络通信时,可以采用TCP协议,也可以采用UDP协议. 应用层:主要负责应用程序的协议,例如HTTP协议.F

102 基于UDP协议的socket套接字

目录 一.基于UDP协议的socket套接字编程 1.1 用法 1.2 udp协议的特点 1.3 实例 一.基于UDP协议的socket套接字编程 socket套接字包括使用TCP协议和UDP协议进行通讯 1.1 用法 socket指定使用UDP通讯协议server = socket.socket(socket.AF_INET, type=socket.SOCK_DGRAM) 发送udp数据server.sendto(发送数据) 接收udp数据data, addr = server.recvfr

Python中的端口协议之基于UDP协议的通信传输

UDP协议: 1.python中基于udp协议的客户端与服务端通信简单过程实现 2.udp协议的一些特点(与tcp协议的比较) ------------------------------------------------------------------------------------------------------------------------------------- 一.UDP协议:OSI七层协议中的传输协议的一种(另外一种tcp协议),他们都是一种端口协议 与TCP协

socket 上传 -- 异常处理--UDP协议 --自定义socket #29

1.异常处理 1 '''''' 2 """ 3 异常处理 4 """ 5 """ 6 1.什么是异常? 7 程序在运行过程中出现了不可预知的错误,并且该错误没有对应的处理机制,就会以异常的形式表现出来 8 造成的影响就是整个程序无法再正常运行 9 """ 10 """ 11 2.异常的结构:类型+信息+位置 12 1.异常的类型:NAMEERROR 13 2

深入理解TCP、UDP协议及两者的区别

一.TCP协议: 位于传输层, 提供可靠的字节流服务.所谓的字节流服务(Byte Stream Service) 是指, 为了方便传输, 将大块数据分割成以报文段(segment) 为单位的数据包进行管理. 而可靠的传输服务是指, 能够把数据准确可靠地传给对方. 即TCP 协议为了更容易传送大数据才把数据分割, 而且 TCP 协议能够确认数据最终是否送达到对方.所以,TCP连接相当于两根管道(一个用于服务器到客户端,一个用于客户端到服务器),管道里面数据传输是通过字节码传输,传输是有序的,每个字