java Socket 简单服务端与客户端代码
前言
本文实现的是服务器与客户端建立连接,客户端可以向服务器发送消息,服务器可以向客户端推送消息。
一:编写服务端
package kf; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; import java.text.SimpleDateFormat; import java.util.Date; /** * 服务端 * @author 刘正 * */ public class servernettext { public static String _pattern = "yyyy-MM-dd HH:mm:ss SSS"; public static SimpleDateFormat format = new SimpleDateFormat(_pattern); // 设置超时间 public static int _sec = 0; public static void main(String[] args) { try { //监听指定的端口 ServerSocket server=new ServerSocket(9999); while (true) { //建立连接 Socket soket=server.accept(); System.out.println(format.format(new Date())); System.out.println("建立了链接 "); //接收客户端消息(从socket中获取输入流,并建立缓冲区进行读取) InputStream din=soket.getInputStream(); System.out.println("客户端ip地址是:"+soket.getInetAddress()); System.out.println("客户端端口号是:"+soket.getPort()); System.out.println("本地端口号是:"+soket.getLocalPort()); byte[] outPut=new byte[4096]; while (din.read(outPut)>0) { //注意指定编码格式,发送方和接收方一定要统一,建议使用UTF-8 String result=new String(outPut); System.out.println("客户端的消息是:"+result); } //给客户端发送消息 OutputStream dout=soket.getOutputStream(); dout.write("已收到你发来的消息!!".getBytes()); din.close(); dout.close(); soket.close(); } } catch (IOException e) { e.printStackTrace(); } } }
二:编写客户端
package kf; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; import java.text.SimpleDateFormat; /** * 客户端 * * @author 刘正 * */ public class clienttextnet { public static String _pattern = "yyyy-MM-dd HH:mm:ss SSS"; public static SimpleDateFormat format = new SimpleDateFormat(_pattern); public static void main(String[] args) { try { while (true) { // 与服务端建立连接 Socket socket = new Socket("127.0.0.1", 9999); // 获得输出流,给服务端发送信息 OutputStream dout = socket.getOutputStream(); String str = "数据传输------"; dout.write(str.getBytes()); // 通过shutdownOutput高速服务器已经发送完数据,后续只能接受数据 socket.shutdownOutput(); // 接收服务端发送的消息 InputStream din = socket.getInputStream(); byte[] outPut = new byte[4096]; while (din.read(outPut) > 0) { String result = new String(outPut); System.out.println("服务端反回的的消息是:" + result); } din.close(); dout.close(); socket.close(); Thread.sleep(3000); } } catch (Exception e) { e.printStackTrace(); } } }
上一篇:
IDEA上Java项目控制台中文乱码