您的位置:首页 > 理论基础 > 计算机网络

java中的网络连接

2015-08-04 08:40 501 查看
网络连接、

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();
        }       
    }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: