六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 51|回复: 0

TCP/UDP与Socket

[复制链接]

升级  6.67%

14

主题

14

主题

14

主题

秀才

Rank: 2

积分
60
 楼主| 发表于 2013-1-28 19:27:45 | 显示全部楼层 |阅读模式
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[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();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[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;/** * 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[100];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[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();}}}
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表