socket通信的入门知识,适合新手入门学习
import java.io.IOException;import java.io.OutputStream;import java.net.ServerSocket;import java.net.Socket;public class Server { public static void main(String[] args) { try { // 创建监听的端口号 ServerSocket s = new ServerSocket(8888); System.out.PRintln("启动服务器....."); System.out.println("等待客户机进入......."); // 让server进入阻塞状态(等待客户机的进入),有客户机连接上此端口的server客户端就会返回一个socket对象,服务器进行接受 Socket ss = s.accept(); // socket的输出流(该流为字节流) OutputStream out = ss.getOutputStream(); String msg = "服务器说你好"; out.write(msg.getBytes()); // 将流和socket关掉,不关掉客户端在未接受到消息的时候会断开连接 out.close(); ss.close(); s.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }}客户端
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.Socket;import java.net.UnknownHostException;public class Client { public static void main(String[] args) { Socket s; try { // 客户机连接服务端的ip地址和端口号 s = new Socket("127.0.0.1", 8888); System.out.println("连接到服务器....."); // 获得输入流(字节流),再把字节输入流放到缓冲输入流中 InputStream in = s.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(in)); String msg = ""; msg = br.readLine(); System.out.println(msg); // 关闭掉流和socket br.close(); in.close(); s.close(); } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }}注意:
由于读取消息的时候是readLine,该方法是读取一行信息直到读到/n(换行)指令为止并且在服务端的输出流和客户端的输入流中联系,客户端的输入流再未接受到服务端输出流的信息时是被阻塞的。了解了这些,进一步的就该是,多个客户端连接到服务端,服务端和客户端之间的交互(可以收发消息)
新闻热点
疑难解答