Java 网络编程 TCP vs UDP -Java学习笔记(31)
2007-07-24 12:01
1231 查看
TCP (Transmission Control Protocol 传输控制协议):面向连接的,不可靠的,数据流服务。
UDP (User Datagram Protocl 用户数据报协议):面向无连接的,不可靠的,数据报服务。
TCP传输和UDP不一样,TCP传输是流式的,必须先建立连接,然后数据流沿已连接的线路(虚电路)传输。因此TCP的数据流不会像UDP数据报一样,每个数据报都要包含目标地址和端口,因为每个数据报要单独路由。TCP传输则只需要在建立连接时指定目标地址和端口就可以了。
如果我不是刚学过砖头似的《计算机网络》(第四版 Andrew S.Tanenbaum著 潘爱民译 清华大学出版社)以上说的我自己都看不懂。上面只是简要提一下,如果要学习网络,这本书还是值得推荐的。英文版名字是Computer Networks。
形象的讲,TCP就像打电话,UDP就像发电报。
就像发电报,宏观上来看UDP是不分客户端和服务端的。通信双方是平等的。
微观上来讲只相对一个报文,发送端是客户端,监听端是服务端。发送端把数据报发给路由器就像把电报发给了邮局,后面的事情就是发送者无法控制,也无从知晓的了。所以说是不可靠的,可能会出现报文丢失而无从知晓。就像每张电报都要有收件人一样,每个数据报都要有目的地址和端口。
就像打电话,TCP每次连接都是分客户端和服务端的。连接的发起者(相当与拨号打电话的人)是客户端,监听者(相当于在电话边等着接电话的人)是服务端。发起者指定要连接的服务器地址和端口(相当于拨号),监听者通过和发起者三次握手建立连接(相当于听到电话响去接电话)。建立连接后双方可以互相发送和接受数据(打电话)。
Java中TCP编程主要通过ServerSocket/Socket 类 实现的,其中Socket.getInputStream()/getOutputStream() 是获得输入/输出 数据流的。ServerSocket.accept()是用来监听建立连接的。
一个简单的小例子:
Server:监听TCP 2000端口,讲所得信息打印
import java.net.*;
import java.io.*;
public class TCPServer ...{
public static void main(String[] args) throws Exception ...{
ServerSocket ss = new ServerSocket(2000);
while(true) ...{
Socket s = ss.accept();
System.out.println("A client has heen connected.");
InputStreamReader r = new InputStreamReader(s.getInputStream());
int c = 0;
while((c=r.read())>-1) ...{
System.out.print((char)c);
}
System.out.println();
r.close();
s.close();
}
}
}
Client:向服务器(本机)2000端口发送一条Hello信息
import java.net.*;
import java.io.*;
public class TCPClient ...{
public static void main(String[] args) throws Exception ...{
Socket s = new Socket("127.0.0.1",2000);
OutputStreamWriter w = new OutputStreamWriter(s.getOutputStream());
w.write("Hello服务器");
w.flush();
w.close();
s.close();
}
}
关于UDP的例子,见http://blog.csdn.net/nyzhl/archive/2007/07/20/1700815.aspx
UDP (User Datagram Protocl 用户数据报协议):面向无连接的,不可靠的,数据报服务。
TCP传输和UDP不一样,TCP传输是流式的,必须先建立连接,然后数据流沿已连接的线路(虚电路)传输。因此TCP的数据流不会像UDP数据报一样,每个数据报都要包含目标地址和端口,因为每个数据报要单独路由。TCP传输则只需要在建立连接时指定目标地址和端口就可以了。
如果我不是刚学过砖头似的《计算机网络》(第四版 Andrew S.Tanenbaum著 潘爱民译 清华大学出版社)以上说的我自己都看不懂。上面只是简要提一下,如果要学习网络,这本书还是值得推荐的。英文版名字是Computer Networks。
形象的讲,TCP就像打电话,UDP就像发电报。
就像发电报,宏观上来看UDP是不分客户端和服务端的。通信双方是平等的。
微观上来讲只相对一个报文,发送端是客户端,监听端是服务端。发送端把数据报发给路由器就像把电报发给了邮局,后面的事情就是发送者无法控制,也无从知晓的了。所以说是不可靠的,可能会出现报文丢失而无从知晓。就像每张电报都要有收件人一样,每个数据报都要有目的地址和端口。
就像打电话,TCP每次连接都是分客户端和服务端的。连接的发起者(相当与拨号打电话的人)是客户端,监听者(相当于在电话边等着接电话的人)是服务端。发起者指定要连接的服务器地址和端口(相当于拨号),监听者通过和发起者三次握手建立连接(相当于听到电话响去接电话)。建立连接后双方可以互相发送和接受数据(打电话)。
Java中TCP编程主要通过ServerSocket/Socket 类 实现的,其中Socket.getInputStream()/getOutputStream() 是获得输入/输出 数据流的。ServerSocket.accept()是用来监听建立连接的。
一个简单的小例子:
Server:监听TCP 2000端口,讲所得信息打印
import java.net.*;
import java.io.*;
public class TCPServer ...{
public static void main(String[] args) throws Exception ...{
ServerSocket ss = new ServerSocket(2000);
while(true) ...{
Socket s = ss.accept();
System.out.println("A client has heen connected.");
InputStreamReader r = new InputStreamReader(s.getInputStream());
int c = 0;
while((c=r.read())>-1) ...{
System.out.print((char)c);
}
System.out.println();
r.close();
s.close();
}
}
}
Client:向服务器(本机)2000端口发送一条Hello信息
import java.net.*;
import java.io.*;
public class TCPClient ...{
public static void main(String[] args) throws Exception ...{
Socket s = new Socket("127.0.0.1",2000);
OutputStreamWriter w = new OutputStreamWriter(s.getOutputStream());
w.write("Hello服务器");
w.flush();
w.close();
s.close();
}
}
关于UDP的例子,见http://blog.csdn.net/nyzhl/archive/2007/07/20/1700815.aspx
相关文章推荐
- 19. JAVA 网络编程 Part 1 (IP与InetAddress类、URL与URLConnection类、URLEncoder与URLDecoder类、TCP&UDP)---- 学习笔记
- java笔记29 网络编程(UDP TCP)
- java基础学习网络编程之UDP和TCP协议 十四 -3
- [学习笔记]Java网络编程之TCP通讯
- java基础学习-- 网络编程之TCP和UDP
- java网络编程 tcp 黑马程序员学习笔记(11)
- JAVA基础 day25 网络编程 IP类 UDP,TCP传输学习 简易聊天工具 TCP并发学习
- Java UDP 网络编程 示例 -Java学习笔记(30)
- 黑马程序员_学习笔记:15) 网络编程:Socket(udp、tcp)
- Java学习笔记之网络编程(二):TCP
- [学习笔记]Java网络编程之UDP通讯
- 学习笔记 Java_网络编程_UDP 2014.7.20
- Java 网络编程 TCP vs UDP
- 黑马程序员--Java基础学习之网络编程(TCP、UDP、Socket、模拟发送和接收数据)
- java 网络编程 tcp黑马程序员学习笔记(4)
- java网络编程学习笔记之一(TCP/IP协议与UDP协议的区别和认识)
- Java学习笔记52(网络编程:UDP协议案例)
- 黑马程序员-------Java笔记--------网络编程(UDP与TCP基本步骤)
- [学习笔记]Java网络编程之TCP通讯
- [2014-11-21]Java笔记_Java网络编程、TCP、UDP