Socket是网络编程中最基本的通信接口,常用的网络辅助类,比如URL等之类,其底层还是基于Socket来实现的。
而Socket,形象来说,就是连接通信的两端,比如这样 S<==>S,中间的通道就是网络了,而简单地利用Socket,我们就可以来实现一个简单的聊天功能
具体效果看下图:
vcC0oaM8L3A+CjxwPrb4v827p7bLvs3Kx9K7uPZTb2NrZXSjrLWxv827p7bLx+vH87W9wLS1xMqxuvKjrGFjY2VwdLvht7W72NK7uPZTb2NrZXS21M/zo6wg1eK+zcrHUzw9PT5T1tC1xNfzsd/Ex7j2U8HLo6y/ydLUwPvTw8bkSW5wdXRTdHJlYW26zU91dHB1dFN0cmVhbcC0vfjQ0LbB0LTBy6OstsG+zcrHvdPK1dDFz6KjrLb40LS+zcrHu9i4tNDFz6KhozwvcD4KPHA+PC9wPgo8cHJlIGNsYXNzPQ=="brush:java;">public class Server { public static void main(String[] args) { try { ServerSocket server = new ServerSocket(9999); Helper.println("Server started, waiting for message."); Socket client = server.accept(); PrintWriter pw = null; while (true) { BufferedReader br = new BufferedReader(new InputStreamReader( client.getInputStream())); String content = br.readLine(); if (content.equals("end")) { server.close(); br.close(); if (pw != null) { pw.close(); } break; } Helper.println(content); Helper.print("Server:"); pw = new PrintWriter(client.getOutputStream(), true); BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); String output = "Server : " + in.readLine(); pw.println(output); pw.flush(); } Helper.println("Client left! Server Closed."); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
public class Client {
public static void main(String[] args) {
try {
Socket client = new Socket("127.0.0.1", 9999);
PrintWriter pw = null;
InputStreamReader isr = null;
Helper.println("Client started, ready to write content.");
String input = "";
while (true) {
Helper.print("Client : ");
InputStream is = System.in;
input = new BufferedReader(new InputStreamReader(is))
.readLine();
pw = new PrintWriter(client.getOutputStream(), true);
pw.println("Client:" + input);
if (input.equals("end")) {
client.close();
is.close();
pw.close();
if (isr != null) {
isr.close();
}
break;
}
isr = new InputStreamReader(client.getInputStream());
Helper.println(new BufferedReader(isr).readLine());
}
Helper.println("Client stopped!");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
嗯,结束。