java Socket通信实例
一直做Java web,几乎没有做过CS方向上的东西。最近一同学来北京找工作,到我这儿来玩。说起笔试经历,说了这样一个程序题,大概是这样的;
用C++编程实现一个简单的通信实例,要求服务器实时接受客户端发送来的消息。虽说没做过这方面的东西,但也知道需要用Java Socket来实现(坦白说C++不会)。工作之余花了2个小时写了一个基本满足要求的实例。也确实遇到了一些问题,贴出来,共同学习。
先贴代码。服务器端:
package qy.client;import java.io.BufferedReader;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.io.InputStreamReader;import java.net.Socket;public class MyClient {public static void main(String[] args) {try {Socket client = new Socket("localhost", 6666);MyClient me = new MyClient();new Thread(me.new Handler(client)).start();} catch (IOException e) {e.printStackTrace();}}class Handler implements Runnable {private BufferedReader br;private DataOutputStream dos;private DataInputStream dis;private Socket socket;private boolean flag = true; // 用于控制循环结束public Handler(Socket s) throws IOException {this.br = new BufferedReader(new InputStreamReader(System.in)); // 用于从控制台接受输入的信息,在发送到服务器this.socket = s;this.dos = new DataOutputStream(this.socket.getOutputStream()); // 向服务器写数据的输出流this.dis = new DataInputStream(this.socket.getInputStream()); // 获取服务器返回数据的输入流}@Overridepublic void run() {while (flag) {try {String str = br.readLine();if ("exit".equals(str)) {this.br.close();this.dos.writeUTF(str);this.dos.flush();String res = dis.readUTF();System.out.println(res);this.dis.close();this.dos.close();this.flag = false;} else {this.dos.writeUTF(str);this.dos.flush();}} catch (IOException e) {e.printStackTrace();}}}}}