自己用java实现飞鸽传书 1 - 实现socket通信
第一步:
建立服务端客户端,实现端到端通信。因为要传递文件,信号量较大,故使用TCP/IP协议。
服务端和客户端都要建立socket,而后通过socket进行通信。目前只实现服务端到客户端的单向通信。
服务端代码如下:
import java.io.PrintStream; import java.net.ServerSocket; import java.net.Socket; public class Server { public static void main(String[] args){ //创建服务端socket,用以网络信息的接收 ServerSocket serverSocket = null; try { //服务端socket使用本地IP,端口号使用36000 serverSocket = new ServerSocket(36000); //保证服务端持续运行 while(true){ //接收网络信息,未接收到则阻塞当前线程 Socket socket = serverSocket.accept(); //获取服务端输出流 PrintStream ps = new PrintStream(socket.getOutputStream()); //向输出流中追加信息 ps.append("你好,这里是服务端!"); //关闭输出流和socket ps.close(); socket.close(); } } catch (Exception e) { e.printStackTrace(); } } }
客户端代码如下:
import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.Socket; public class Client { public static void main(String[] args){ BufferedReader reader = null; Socket socket = null; try { //创建客户端socket,用以连接服务端 socket = new Socket("127.0.0.1", 36000); //读取服务端传来的字节流 reader = new BufferedReader( new InputStreamReader(socket.getInputStream()) ); //读取字节流中的信息,并以字符串输出 StringBuilder builder = new StringBuilder(); String line; while((line=reader.readLine()) != null){ builder.append(line).append("\n"); } System.out.println(builder.toString()); //关闭reader和socket reader.close(); socket.close(); } catch (Exception e) { e.printStackTrace(); } } }
先运行服务端,再运行客户端,会看到控制台输出预期中的信息:
仅是学习笔记,难免出错,望不吝指点