java中的网络连接
2015-08-04 08:40
501 查看
网络连接、
UDP程序的步骤:
发送数据包:
使用DatagramSocket类创建一个套接字的对象。
使用DatagramPacket创建一个要发送数据包的对象。
使用DatagramSocket类的send()方法发送数据包。
接收数据包:
使用DatagramSocket类创建一个套接字的对象。
使用DatagramPacket创建一个要接收数据包的对象。
使用DatagramSocket类的receive()方法接收数据包。
InetAddress
InetAddress类用来解析IP地址import java.net.InetAddress; import java.net.UnknownHostException; public class TestInternet { public static void main(String[] args) { try { //创建本地主机的InetAddress对象。 InetAddress ia1 = InetAddress.getLocalHost(); //返回本地主机名 System.out.println(ia1.getHostName()); //返回本地主机的IP地址 System.out.println(ia1.getHostAddress()); //创建主机名为J***A, ip为192.168.0.0的对象 byte[] ip = new byte[]{(byte) 192,(byte) 168,0,0}; InetAddress ia2 = InetAddress.getByAddress("J***A", ip); //返回ia2主机名 System.out.println(ia2.getHostName()); //返回ia2的IP地址 System.out.println(ia2.getHostAddress()); } catch (UnknownHostException e) { e.printStackTrace(); } } }
URL
Url用来解析网址。 代表资源地址。由协议名,资源名,文件名组成。openStream() 方法打开输入流,得到数据,返回InputStream类型对象。import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.MalformedURLException; import java.net.URL; public class TestUrl { public static void main(String[] args) { //有可能网址不存在,出现异常。 try { //URL用来解析百度网址。 URL url1 = new URL("http://www.baidu.com/"); InputStream is = url1.openStream();//返回图片的信息流。 InputStreamReader isr= new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); String line= br.readLine(); while(line!=null){ System.out.println(line); line = br.readLine(); } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } try { //解析图片网址 URL url2 = new URL("http://pic.nipic.com/2007-11-09/2007119122519868_2.jpg"); //建立图片文件 File fileImag = new File("D:\\11.jpg"); if(fileImag.exists()){ fileImag.createNewFile(); } byte[] b = new byte[1024]; InputStream is = url2.openStream(); OutputStream os = new FileOutputStream(fileImag); int num = is.read(b); while(num!=-1){ os.write(b, 0, num); num = is.read(b); } os.flush(); is.close(); os.close(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
TCP协议
TCP协议是建立可靠的连接进行传输的协议。他就就像打电话,一方呼叫,必须等待另一方响应后才能进行通话传输。//服务端 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.Scanner; public class TestServer { public static void main(String[] args) { try { //定义服务端 ServerSocket server = new ServerSocket(1010); System.out.println("服务启动!"); Socket socket = server.accept(); //服务端读入数据 InputStream is = socket.getInputStream(); InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); //服务端写出数据 OutputStream os =socket.getOutputStream(); OutputStreamWriter osw = new OutputStreamWriter(os); BufferedWriter bw = new BufferedWriter(osw); //捕获控制台输入 Scanner scanner = new Scanner(System.in); while(true){ String s = br.readLine(); System.out.println("客户端说:"+s); System.out.print("服务端说:"); String words = scanner.next(); bw.write(words+"\n"); bw.flush(); } } catch (IOException e) { e.printStackTrace(); } } } //客户端 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.net.Socket; import java.net.UnknownHostException; import java.util.Scanner; public class TestClient { public static void main(String[] args) { try { //定义客户端 Socket socket = new Socket("192.168.0.44", 8085); //写出数据。 OutputStream os =socket.getOutputStream(); OutputStreamWriter osw = new OutputStreamWriter(os); BufferedWriter bw = new BufferedWriter(osw); //读入数据 InputStream is = socket.getInputStream(); InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); //捕获控制台输入 Scanner scanner = new Scanner(System.in); //一直执行 while(true){ System.out.print("客户端说:"); String words = scanner.next(); bw.write(words+"\n"); bw.flush(); String s = br.readLine(); System.out.println("服务端说:"+s); } } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
UDP协议
UDP协议是建立不可靠的连接进行传输的协议。他就像发邮件,一方邮件发出后就不再关心是否接受者已经接受到。UDP协议是建立短连接,建立短连接后将数据打包发送, 不可靠,并且数据包大小在64K以下。UDP程序的步骤:
发送数据包:
使用DatagramSocket类创建一个套接字的对象。
使用DatagramPacket创建一个要发送数据包的对象。
使用DatagramSocket类的send()方法发送数据包。
接收数据包:
使用DatagramSocket类创建一个套接字的对象。
使用DatagramPacket创建一个要接收数据包的对象。
使用DatagramSocket类的receive()方法接收数据包。
//Receiver import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; import java.util.Scanner; public class MyReceiver { public static void main(String[] args) { try { DatagramSocket receiver = new DatagramSocket(8080); DatagramSocket send = new DatagramSocket(); //定义要输入的数据流 Scanner in =new Scanner(System.in); //将数据流打包 while(true){ //接收自发送端 byte[] array = new byte[1024]; DatagramPacket packet = new DatagramPacket(array, 1024); receiver.receive(packet); byte[] data = packet.getData(); System.out.println("发送端说:"+new String(data, 0, packet.getLength())); //发送给发送端 System.out.print("发送给发送端:"); String s= in.next(); byte[] arr = s.getBytes(); DatagramPacket packet_send = new DatagramPacket(arr, arr.length,InetAddress.getByName("192.168.0.34"), 8088); send.send(packet_send); } } catch (SocketException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
//send import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; import java.util.Scanner; public class MySend { public static void main(String[] args) { try { //创建发送端 //创建一个DatagramSocket套接字 DatagramSocket send = new DatagramSocket(); DatagramSocket receive = new DatagramSocket(8088); Scanner in =new Scanner(System.in); while(true){ //发送给发送端 System.out.print("发送给接收端:"); String s= in.next(); byte[] array = s.getBytes(); //创建一个发送数据的数据包 DatagramPacket packet = new DatagramPacket(array, array.length,InetAddress.getByName("192.168.0.34"), 8080); send.send(packet); //接收接收端发来的数据 byte[] arr = new byte[1024]; DatagramPacket packet_receive = new DatagramPacket(arr, 1024); receive.receive(packet_receive); byte[] data = packet_receive.getData(); System.out.println("接收端说:"+new String(data,0,packet_receive.getLength())); } } catch (SocketException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
相关文章推荐
- iOS网络库Alamofire内部实现初探
- HttpPost 中文乱码。
- golang捕获http.ResponseWriter被close的两种方式(有无context)
- 基于Tinyhttp改写的http服务器(memcached,mysql)
- HTTP长连接和短连接原理浅析
- python http请求
- HTTP 2.0 中文版
- HDU 4975
- 通俗理解TCP握手次数是三次
- 《深入理解Nginx》之HTTP模块
- 【Android多媒体】NuPlayer for HTTP Live Streaming【4】
- 升级windows 10后网络连接异常
- TCP为什么需要3次握手与4次挥手(转载)
- C#网络编程《一》
- (转)DNS使用的是TCP协议还是UDP协议
- 【linux高级程序设计】(第十四章)TCP高级应用
- AFNetworking和ASIHTTPRequest的比较
- tcpdump 抓包
- 15/8/2网络连接/C-S连接
- webservice http soap