前言
socket(套接字),Socket和ServerSocket位于java.net包中,之前虽然对socket有过一些了解,但一直都是云里雾里的,特意仔细的学习了一个socket,用socket模拟一个天气查询的功能,并且解决了几个使用socket过程中比较严重的问题。
最简单的客户端和服务端
服务端代码
1 packagecn.hucc.socket.server;2
3 importjava.io.DataInputStream;4 importjava.io.DataOutputStream;5 importjava.io.IOException;6 importjava.net.ServerSocket;7 importjava.net.Socket;8
9 /**
10 *11 * @auth hucc12 * @date 2015年10月10日13 */
14 public classWeatherServer {15
16 private static final int PORT = 8888;17
18 public static voidmain(String[] args) {19
20 ServerSocket server = null;21 Socket socket = null;22 DataInputStream dataInputStream = null;23 DataOutputStream dataOutputStream = null;24 try{25 server = newServerSocket(PORT);26 System.out.println("天气服务端已经移动,监听端口:" +PORT);27 socket =server.accept();28
29 //接受客户端请求
30 dataInputStream = newDataInputStream(socket.getInputStream());31 String request =dataInputStream.readUTF();32 System.out.println("from client..." +request);33
34 //响应客户端
35 dataOutputStream = newDataOutputStream(socket.getOutputStream());36 String response = "天气:晴朗,温度:36度";37 dataOutputStream.writeUTF(response);38
39 } catch(IOException e) {40 e.printStackTrace();41 } finally{42 try{43 if (dataInputStream != null) {44 dataInputStream.close();45 }46 if (dataOutputStream != null) {47 dataOutputStream.close();48 }49 } catch(IOException e) {50 e.printStackTrace();51 }52 }53 }54 }
View Code
服务端代码很简单,这里没有直接使用InputStream和OutputStream两个流,而是使用了DataInputStream和DataOutputStream两个类,通过readUTF()和writeUTF()两个方法免去转码的痛苦。
客户端代码