Java Socket通信

InetAddress常用方法:

通过工厂模式获取实例  InetAddress.getLocalHost()、InetAddress.getByName("主机名")

获取计算机名  getHostName()

获取IP地址  getHostAddress() | getAddress()(返回字节数组)

URL常用方法:

获取URL实例(六类构造方法) 如URL(String)

获取端口  getPort()

获取文件路径  getPath()

获取文件名  getFile()

获取相对路径  getRef()

查询字符串  getQuery() 

 基于TCP的Socket通信

服务器:

1、创建ServerSocket对象,绑定监听端口

2、通过accept()方法监听客户端请求

3、建立连接,通过输入流读取客户端发送的请求信息

4、通过输出流发送响应信息

            //接受客户端信息
            ServerSocket serverSocket = new ServerSocket(8888);
            Socket socket = serverSocket.accept();
            InputStream is=socket.getInputStream();
            InputStreamReader isr=new InputStreamReader(is);
            BufferedReader br=new BufferedReader(isr);
            String str=null;
            while((str=br.readLine())!=null){
                System.out.println("客户端发送信息:"+str);
            }
            //响应客户端
            OutputStream os=socket.getOutputStream();
            PrintWriter pw=new PrintWriter(os);
            pw.write("欢迎登陆");
            pw.flush();

客户端:

1、创建Socket对象,指明服务器的地址和端口号

2、建立连接,向服务端发送请求

3、获取服务器的响应信息

     //发送请求
        Socket socket=new Socket("localhost",8888);
        OutputStream os=socket.getOutputStream();
        PrintWriter pw=new PrintWriter(os);
        pw.write("用户名:张珊,密码:123");
        pw.flush();

        //获取响应信息
        InputStream is=socket.getInputStream();
        InputStreamReader isr=new InputStreamReader(is);
        BufferedReader br=new BufferedReader(isr);
        String str=null;
        while((str=br.readLine())!=null){
            System.out.println("服务端发送信息:"+str);
        }

 基于UDP的Socket通信

服务器:

1、创建DatagramSocket对象,绑定监听端口

2、创建数据报DatagramPacket,指定数据包大小

3、接收客户端数据报

4、读取数据

       //接受客户端信息
        DatagramSocket ds=new DatagramSocket(8888);
        byte[] bytes=new byte[1000];
        DatagramPacket dp=new DatagramPacket(bytes,bytes.length);
        ds.receive(dp);
        System.out.println(new String(bytes,0, dp.getLength()));

        //响应客户端
        InetAddress inetAddress=dp.getAddress();
        byte[] bytes2="欢迎登录".getBytes();
        DatagramPacket dp2=new DatagramPacket(bytes2,bytes2.length,inetAddress,dp.getPort());
        ds.send(dp2);
        ds.close();

 

客户端:

1、创建Socket对象,指明服务器的地址和端口号

2、建立连接,向服务端发送请求

3、获取服务器的响应信息

       //发送信息
        InetAddress inetAddress=InetAddress.getByName("localhost");
        byte[] bytes="用户名:张三,密码:123".getBytes();
        DatagramPacket dp=new DatagramPacket(bytes,bytes.length,inetAddress,8888);
        DatagramSocket ds=new DatagramSocket();
        ds.send(dp);

        //接受服务段信息
        byte[] bytes2=new byte[1000];
        DatagramPacket dp2=new DatagramPacket(bytes2,bytes.length);
        ds.receive(dp2);
        System.out.println(new String(bytes2,0, dp2.getLength()));
        ds.close();

注:

1、关于多线程,通过setPriority(int)设置优先级可提高运行速度

2、当关闭socket的输入输出流时,socket也会关闭,一般直接关闭socket

3、服务器传递数据时通常以对象的形式,可通过ObjectOutputStream.writeObject(User)将对象序列化后进行传递

4、客户端接受服务器文件,通过FileOutputStream(FIle)创建BufferOutputStream实例,通过ObjectInputStream的read()方法将数据读入缓冲数组中,利用BufferOutputStream实例将数组数据写入文件

posted @ 2023-02-01 22:29  tutulove  阅读(66)  评论(0)    收藏  举报