java中的网络连接

来源:互联网 发布:手机java编程软件 编辑:程序博客网 时间:2024/04/29 16:52

网络连接、

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());                //创建主机名为JAVA, ip为192.168.0.0的对象                byte[] ip = new byte[]{(byte) 192,(byte) 168,0,0};                InetAddress ia2 = InetAddress.getByAddress("JAVA", 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()方法接收数据包。

//Receiverimport 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();        }    }}
//sendimport 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();        }           }}
0 0
原创粉丝点击