黑马程序员 Java网络传输UDP和TCP协议
2012-01-12 16:26
931 查看
----------------------
android培训、java培训、期待与您交流! ----------------------
Java网络编程是由Socket类来实现,网络传输有UDP和TCP协议,前者不需要服务器端,通过数据包封装传输,数据传输最多64k,后者直接建立Socket流连接,可传输很大数据
需求:Java建立两个程序,用UDP协议实现发送端发送消息,接收端能接收到。
基本思路:使用一个main函数,建立两个线程,分别是发送消息和接收消息,同时运行两个线程
需求3:用TCP协议实现服务器端和客户端的通讯,需要保证当客户端连接上时,服务器端知道客户端的ip地址,并且服务器端能收到客户端发过来的信息。
如果有多个客户端连接服务器时,需要使用多线程,才能保证服务器端数据安全。
由于Tcp协议客户端和服务器端都是使用阻塞式方法,当出现程序没有停下来时,我们就从服务器或者客户端的阻塞方法入手,解决出现的问题,这是最直接了当的解决方案。
需求4:用TcP协议通过多线程的方式将文件上传到服务器上
----------------------
android培训、java培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net/heima
android培训、java培训、期待与您交流! ----------------------
Java网络编程是由Socket类来实现,网络传输有UDP和TCP协议,前者不需要服务器端,通过数据包封装传输,数据传输最多64k,后者直接建立Socket流连接,可传输很大数据
需求:Java建立两个程序,用UDP协议实现发送端发送消息,接收端能接收到。
import java.net.*; import java.io.*; public class UdpSend{ public void getHost(String ipAddress) { try{ java.net.InetAddress ia = InetAddress.getByName(ipAddress); String ip = ia.getHostAddress(); String name= ia.getHostName(); System.out.println(ip); System.out.println(name); } catch(Exception e) { e.printStackTrace(); } } public void udpSendData() throws Exception { DatagramSocket ds = new DatagramSocket(8087); //发送的内容编码为字节数组,数据原为键盘录入 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String line = null; while((line=br.readLine())!=null) { if("886".equals(line)) break; byte [] by = line.getBytes(); //发送的地址 InetAddress ia = InetAddress.getByName("192.168.0.149"); //将发送数据封装成包的形式 DatagramPacket dp = new DatagramPacket(by,0,by.length,ia,1212); ds.send(dp); } br.close(); ds.close(); } public static void main(String [] args) throws Exception { UdpSend ur = new UdpSend(); ur.udpSendData(); } } class UdpReceive{ public void udpReceiveData() throws Exception { DatagramSocket ds = new DatagramSocket(1212); while(true) { //接收的内容 byte[] by = new byte[1024]; //将发送数据封装成包的形式 DatagramPacket dp = new DatagramPacket(by,by.length); ds.receive(dp);//堵塞式接收 //接收到的数据解码字符串 String data = new String(dp.getData(),0,dp.getLength()); System.out.println(dp.getAddress().getHostAddress()+"::"+data+ "::"+dp.getPort()); } } public static void main(String [] args) throws Exception { UdpReceive ur = new UdpReceive(); ur.udpReceiveData(); } }需求2:用UDP协议实现聊天程序
基本思路:使用一个main函数,建立两个线程,分别是发送消息和接收消息,同时运行两个线程
需求3:用TCP协议实现服务器端和客户端的通讯,需要保证当客户端连接上时,服务器端知道客户端的ip地址,并且服务器端能收到客户端发过来的信息。
如果有多个客户端连接服务器时,需要使用多线程,才能保证服务器端数据安全。
import java.util.*; import java.net.*; import java.io.*; public class ThreadDemo { /** *源:Socket读取流 *目的:Socket输出流 **/ public void serverTcp() throws Exception{ ServerSocket ss = new ServerSocket(8001); while(true) { Socket s = ss.accept();//阻塞式等待连接 //获取连接客户端的ip地址 new Thread(new ServerThread(s)).start(); } } public static void main(String[] args) throws Exception { ThreadDemo td = new ThreadDemo(); td.serverTcp(); } } class ClientTcp{ public void ClientTcp() throws Exception{ Socket s = new Socket(); InetAddress ia = InetAddress.getByName("192.168.0.149"); s.connect(new InetSocketAddress(ia,8001)); while(true) { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); OutputStream os = s.getOutputStream(); PrintWriter pw = new PrintWriter(os,true);//自动刷新 String line = br.readLine(); pw.println(line); if("over".equals(line)) break; } } public static void main(String[] args) throws Exception { ClientTcp td = new ClientTcp(); td.ClientTcp(); } } class ServerThread implements Runnable{ Socket s; ServerThread(Socket s){ this.s=s; } public void run () { try{ String ip = s.getInetAddress().getHostAddress(); System.out.println(ip+" 客户端连接上......"); while(true){ InputStream is = s.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); String line = br.readLine(); if("over".equals(line)) break; System.out.println(line); } System.out.println(ip+" 客户端断开......"); } catch(Exception e) { new RuntimeException("接受失败"); } } }
由于Tcp协议客户端和服务器端都是使用阻塞式方法,当出现程序没有停下来时,我们就从服务器或者客户端的阻塞方法入手,解决出现的问题,这是最直接了当的解决方案。
需求4:用TcP协议通过多线程的方式将文件上传到服务器上
import java.util.*; import java.net.*; import java.io.*; public class TcpDemo { /** *源:Socket读取流 *目的:Socket输出流 **/ public static void main(String[] args) throws Exception { ServerSocket ss = new ServerSocket(8001); while(true) { Socket s = ss.accept(); new Thread(new MyThread(s)).start(); } } } class ClientTcp{ public void sendFile(String[] args) throws Exception { Socket s = new Socket("192.168.0.149",8001); File f = new File(args[0]); InputStream is = new FileInputStream(f); OutputStream os = s.getOutputStream(); int len = 0; byte[] by = new byte[1024]; while((len=is.read(by))!=-1) { os.write(by,0,len); } s.shutdownOutput(); byte[] by1 = new byte[1024]; int arr = s.getInputStream().read(by1); System.out.println(new String(by1,0,arr)); s.close(); } public static void main(String[] args) throws Exception { ClientTcp td = new ClientTcp(); td.sendFile(args); } } class MyThread implements Runnable { Socket s; MyThread(Socket s) {this.s=s;} public void run() { try{ //获取连接客户端的ip地址 String ip = s.getInetAddress().getHostAddress(); System.out.println(ip+" 客户端连接上......"); InputStream is = s.getInputStream(); int count = 1; File f1 = new File("d:\\"+ip+".jpg"); while(f1.exists()) f1 = new File("d:\\"+ip+"_("+(count++)+").jpg"); OutputStream os = new FileOutputStream(f1); byte[] by = new byte[1024]; int len = 0; while((len=is.read(by))!=-1) { os.write(by,0,len); } PrintWriter out = new PrintWriter(s.getOutputStream(),true); out.println("上传成功"); } catch(Exception e){} } }
----------------------
android培训、java培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net/heima
相关文章推荐
- 黑马程序员——java网络编程中的传输协议:UDP和TCP
- 黑马程序员_Java基础_网络编程_UDP传输协议编程,控制台聊天程序
- 黑马程序员_java网络编程——UDP传输和TCP传输
- 黑马程序员--10.网络编程--02.【网络传输三要素在Java中的体现】【TCP和UDP概念】【Socket基本概念】
- JAVA之旅(三十二)——JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用
- JAVA之旅(三十二)——JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用
- 黑马程序员——8.网络编程(网络模型、网络地址、传输协议(UDP、TCP/IP)、客户端和服务器端、URL)
- 黑马程序员_温习 网络编辑一 (个人笔记)摘要(网络概述---网络参考模型---网络传输要素---IP地址---端口----传输协议(UDP -- TCP)---Socket机制 )
- java 网络编程 [网络传输] [协议] [UDP与TCP] [套接字] [URL与URI]
- JAVA中的网络协议,UDP,TCP案例分析及笔记总结
- 黑马程序员 网络(UDP传输和TCP传输)及反射
- 【黑马程序员】Java基础12:UDP和TCP的网络通讯
- 网络传输两类传输协议:TCP UDP
- 黑马程序员_毕向东JAVA基础_网络编程(概述&UDP&TCP)
- Java 网络编程(二) 两类传输协议:TCP UDP
- Java基础—网络编程【OSI/RM TCP/IP】【网络通信三要素】【UDP传输 & TCP传输】【DNS域名解析】
- JAVA基础 day25 网络编程 IP类 UDP,TCP传输学习 简易聊天工具 TCP并发学习
- [置顶] 基于iOS的网络音视频实时传输系统(四)- 自定义socket协议(TCP、UDP)
- java基础_13_网络协议 (UDP_TCP)
- Java基础—网络编程【OSI/RM TCP/IP】【网络通信三要素】【UDP传输 & TCP传输】【DNS域名解析】