OSI七层与TCP/IP4层
TCP/IP4层 |
OSI七层 |
协议 |
应用层 |
应用层 |
Telnet、FTP、HTTP、DNS、SMTP、POP3 |
表示层 |
|
会话层 |
|
传输层 |
传输层 |
TCP、UDP |
网络层 |
网络层 |
IP、ICMP、IGMP |
网络接口层
|
数据链路层
|
|
物理层 |
|
TCP与UDP比较
|
TCP |
UDP |
是否连接 |
面向连接的 |
面向非连接的 |
传输可靠性 |
可靠的 |
不可靠的 |
应用场合 |
1、数据完整性要求高的传输
2、传输大量的数据(大小没有限制)
如:安装文件下载等 |
1、实时性要求高,丢失部分数据也无关紧要的传输
2、少量数据(有限制,每次不超过64K)
如:视频会议等 |
速度 |
慢 |
快 |
Socket与TCP、UDP
1、TCP实现
- package myjava.net.socket.tcp;
-
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.OutputStream;
- import java.net.InetAddress;
- import java.net.ServerSocket;
- import java.net.Socket;
-
-
-
-
-
-
-
-
- public class SocketTCP extends Thread {
- private Socket s;
-
- public SocketTCP(Socket s) {
- this.s = s;
- }
-
- @Override
- public void run() {
- try {
- OutputStream os = s.getOutputStream();
- InputStream is = s.getInputStream();
- os.write("Hello,welcome you!".getBytes());
- byte[] buf = new byte[100];
- int len = is.read(buf);
- System.out.println(new String(buf, 0, len));
- os.close();
- is.close();
- s.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- public static void main(String[] args) {
- if (args.length > 0)
- server();
- else
- client();
- }
-
- public static void server() {
- try {
- ServerSocket ss = new ServerSocket(6000);
- while (true) {
- Socket s = ss.accept();
- new SocketTCP(s).start();
- }
-
-
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-
- public static void client() {
- try {
- Socket s = new Socket(InetAddress.getLocalHost(), 6000);
- OutputStream os = s.getOutputStream();
- InputStream is = s.getInputStream();
- byte[] buf = new byte[100];
- int len = is.read(buf);
- System.out.println(new String(buf, 0, len));
- os.write("Hello,this is zhangsan!".getBytes());
- os.close();
- is.close();
- s.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
package myjava.net.socket.tcp;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
/**
* Dependent on TCP protocol
* 1.MultiThread for server socket.
* 2.Create a new thread when accept a client socket.
*
* @author jeck.xie 2009-3-25
*/
public class SocketTCP extends Thread {
private Socket s;
public SocketTCP(Socket s) {
this.s = s;
}
@Override
public void run() {
try {
OutputStream os = s.getOutputStream();
InputStream is = s.getInputStream();
os.write("Hello,welcome you!".getBytes());
byte[] buf = new byte[100];
int len = is.read(buf);
System.out.println(new String(buf, 0, len));
os.close();
is.close();
s.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
if (args.length > 0)
server();
else
client();
}
public static void server() {
try {
ServerSocket ss = new ServerSocket(6000);
while (true) {
Socket s = ss.accept();
new SocketTCP(s).start();
}
// ss.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void client() {
try {
Socket s = new Socket(InetAddress.getLocalHost(), 6000);
OutputStream os = s.getOutputStream();
InputStream is = s.getInputStream();
byte[] buf = new byte[100];
int len = is.read(buf);
System.out.println(new String(buf, 0, len));
os.write("Hello,this is zhangsan!".getBytes());
os.close();
is.close();
s.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
2.UDP实现
- package myjava.net.socket.udp;
-
- import java.net.DatagramPacket;
- import java.net.DatagramSocket;
- import java.net.InetAddress;
-
-
-
-
-
-
- public class SocketUDP {
-
- public static void main(String[] args) {
- if (args.length > 0)
- recv();
- else
- send();
- }
-
- public static void recv() {
- try {
- DatagramSocket ds = new DatagramSocket(6000);
-
-
- byte[] buf = new byte[100];
- DatagramPacket dp = new DatagramPacket(buf, 100);
- ds.receive(dp);
- System.out.println(new String(buf, 0, 100));
-
-
- String str = "Welcome you!";
- DatagramPacket dpSend = new DatagramPacket(str.getBytes(), str
- .length(), dp.getAddress(), dp.getPort());
- ds.send(dpSend);
-
- ds.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- public static void send() {
- try {
- DatagramSocket ds = new DatagramSocket();
-
-
- String str = "Hello, this is zhangsan!";
- DatagramPacket dp = new DatagramPacket(str.getBytes(),
- str.length(), InetAddress.getLocalHost(), 6000);
- ds.send(dp);
-
-
- byte[] buf = new byte[100];
- DatagramPacket dbRecv = new DatagramPacket(buf, 100);
- ds.receive(dbRecv);
- System.out.println(new String(buf, 0, 100));
-
- ds.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- }
阅读(1003) | 评论(0) | 转发(0) |