自己手写了一个socket的小例子,话不多说上代码
/** * Socket.java * soket * 2017年10月26日 lxw * * Copyright (c) 2017, TNT All Rights Reserved. */ package soket; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; /** * Socket通信步骤(简单分为四部) * 1建立服务端SeverSocket和客户端Socket * 2打开链接到Socket的输入输出流 * 3按照协议进行读写操作 * 4关闭相应的资源 * * * 服务端Server.java * 1创建ServerSocket对象绑定并监听端口 * 2通过accept监听客户端的请求 * 3建立连接后,通过输入输出流进行读写操作 * 4关闭相关资源 * */ public class Server { //端口号 public static int oprt = 8888; //Socket服务端 @SuppressWarnings("resource") public static void main(String[] args) { try { ServerSocket serverSocket = new ServerSocket(oprt); System.out.println("服务已启动,等待客户端连接。。。。"); //侦听并接受次套接字的链接,并返回一个socket Socket socket = serverSocket.accept(); //根据输入输出流和客户端连接 //得到一个输入流接受客户端的信息 InputStream inputStream = socket.getInputStream(); //提高效率 将字节流转换成字符流 InputStreamReader inputStreamReader = new InputStreamReader(inputStream); //加入缓存区 BufferedReader bufferedReader = new BufferedReader(inputStreamReader); String temp = null; String info = ""; while((temp=bufferedReader.readLine())!=null){ info+=temp; System.out.println("已接收到客户端连接"); System.out.println("服务端接收到客户端信息:"+info+",当前客户端ip为:"+socket.getInetAddress().getHostAddress()); } //获取一个输出流,像服务端发送信息 OutputStream outputStream = socket.getOutputStream(); //将输出流包装成打印流 PrintWriter printWriter = new PrintWriter(outputStream); printWriter.print("你好,客户端已接收到你的信息"); printWriter.flush(); //关闭输出流 socket.shutdownInput(); //关闭相应资源 printWriter.close(); outputStream.close(); bufferedReader.close(); inputStreamReader.close(); inputStream.close(); socket.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
/** * Client.java * soket * 2017年10月26日 lxw * * Copyright (c) 2017, TNT All Rights Reserved. */ package soket; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; import java.net.Socket; import java.net.UnknownHostException; /** * 客户端Client.java * 1创建客户端socket对象,指点服务端的地址和端口号 * 2建立连接后,通过输入输出流进行读写操作 * 3通过输出输入流获取服务器的返回信息 * 4关闭相关资源 */ public class Client { //地址和端口号 public String localhost = "localhost"; public int oprt = 8888; //socket 的客户端 public static void main(String[] args) { try { Socket socket = new Socket("localhost",8888); //获得一个输出流想客户端打印 OutputStream outputStream = socket.getOutputStream(); //包装成 打印刘 PrintWriter printWriter = new PrintWriter(outputStream); printWriter.print("hi,服务端,我是白雪王子"); printWriter.flush(); //关闭输出流 socket.shutdownOutput(); //获取一个输入流得到服务端的消息 InputStream inputStream = socket.getInputStream(); //将字节流转换成字符流 InputStreamReader inputStreamReader = new InputStreamReader(inputStream); //缓存区 BufferedReader bufferedReader = new BufferedReader(inputStreamReader); //临时变量 String temp = null; String info = ""; while ((temp=bufferedReader.readLine())!=null){ info+=temp; System.out.println("客户端接受服务端的消息:"+info); } //关闭相应的资源 bufferedReader.close(); inputStream.close(); printWriter.close(); outputStream.close(); socket.close(); } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
运行结果如下