Socket是网络编程中最基本的通信接口,常用的网络辅助类,比如URL等之类,其底层还是基于Socket来实现的。
而Socket,形象来说,就是连接通信的两端,比如这样 S<==>S,中间的通道就是网络了,而简单地利用Socket,我们就可以来实现一个简单的聊天功能
具体效果看下图:
这只是在本地中试用的效果,如果加上UI界面,其实就可以做成一个聊天的小应用了。
1. Server 端主要是利用ServerSocket的accept方法来等待客户端的连接,如果客户一直没有连接,则会在这里等待,直到客户端请求到来。
而客户端就是一个Socket,当客户端请求到来的时候,accept会返回一个Socket对象, 这就是S<==>S中的左边那个S了,可以利用其InputStream和OutputStream来进行读写了,读就是接收信息,而写就是回复信息。
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(); } } }
Java 利用 Socket 实现服务器客户端聊天,布布扣,bubuko.com
原文地址:http://blog.csdn.net/linmiansheng/article/details/21653061