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实例将数组数据写入文件

浙公网安备 33010602011771号