TCP/UDP与Socket
OSI七层与TCP/IP4层TCP/IP4层OSI七层协议应用层应用层Telnet、FTP、HTTP、DNS、SMTP、POP3表示层会话层传输层传输层TCP、UDP网络层网络层IP、ICMP、IGMP网络接口层
数据链路层
物理层
TCP与UDP比较
TCPUDP是否连接面向连接的面向非连接的传输可靠性可靠的不可靠的应用场合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;/** * Dependent on TCP protocol<br> * 1.MultiThread for server socket.<br> * 2.Create a new thread when accept a client socket.<br> ** @author jeck.xie 2009-3-25 */public class SocketTCP extends Thread {private Socket s;public SocketTCP(Socket s) {this.s = s;}@Overridepublic void run() {try {OutputStream os = s.getOutputStream();InputStream is = s.getInputStream();os.write("Hello,welcome you!".getBytes());byte[] buf = new byte;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();elseclient();}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;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;/** * Dependent on UDP protocol<br> ** @author jeck.xie 2009-3-25 */public class SocketUDP {public static void main(String[] args) {if (args.length > 0)recv();elsesend();}public static void recv() {try {DatagramSocket ds = new DatagramSocket(6000);// accept databyte[] buf = new byte;DatagramPacket dp = new DatagramPacket(buf, 100);ds.receive(dp);System.out.println(new String(buf, 0, 100));// send dataString 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();// send dataString str = "Hello, this is zhangsan!";DatagramPacket dp = new DatagramPacket(str.getBytes(),str.length(), InetAddress.getLocalHost(), 6000);ds.send(dp);// accept databyte[] buf = new byte;DatagramPacket dbRecv = new DatagramPacket(buf, 100);ds.receive(dbRecv);System.out.println(new String(buf, 0, 100));ds.close();} catch (Exception e) {e.printStackTrace();}}}
页:
[1]