五、基本的Client/Server程序
以下是一个基本的客户端/服务器端程序代码。主要实现了服务器端一直监听某个端口,等待客户端连接请求。客户端根据IP地址和端口号连接服务器端,从键盘上输入一行信息,发送到服务器端,然后接收服务器端返回的信息,最后结束会话。这个程序一次只能接受一个客户连接。
ps:这个小例子写好后,服务端一直接收不到消息,调试了好长时间,才发现误使用了PrintWriter的print()方法,而BufferedReader的readLine()方法一直没有遇到换行,所以一直等待读取。我晕死~~@_@
客户端程序:- package sock;
-
- import java.io.BufferedReader;
- import java.io.InputStreamReader;
- import java.io.PrintWriter;
- import java.net.Socket;
-
- public class SocketClient {
- public static void main(String[] args) {
- try {
- /** 创建Socket*/
- // 创建一个流套接字并将其连接到指定 IP 地址的指定端口号(本处是本机)
- Socket socket =new Socket("127.0.0.1",2013);
- // 60s超时
- socket.setSoTimeout(60000);
-
- /** 发送客户端准备传输的信息 */
- // 由Socket对象得到输出流,并构造PrintWriter对象
- PrintWriter printWriter =new PrintWriter(socket.getOutputStream(),true);
- // 将输入读入的字符串输出到Server
- BufferedReader sysBuff =new BufferedReader(new InputStreamReader(System.in));
- printWriter.println(sysBuff.readLine());
- // 刷新输出流,使Server马上收到该字符串
- printWriter.flush();
-
- /** 用于获取服务端传输来的信息 */
- // 由Socket对象得到输入流,并构造相应的BufferedReader对象
- BufferedReader bufferedReader =new BufferedReader(new InputStreamReader(socket.getInputStream()));
- // 输入读入一字符串
- String result = bufferedReader.readLine();
- System.out.println("Server say : " + result);
-
- /** 关闭Socket*/
- printWriter.close();
- bufferedReader.close();
- socket.close();
- }catch (Exception e) {
- System.out.println("Exception:" + e);
- }
- }
- }
复制代码
服务器端程序:
- package sock;
- import java.io.BufferedReader;
- import java.io.InputStreamReader;
- import java.io.PrintWriter;
- import java.net.ServerSocket;
- import java.net.Socket;
-
- public class SocketServer {
- public static void main(String[] args) {
- try {
- /** 创建ServerSocket*/
- // 创建一个ServerSocket在端口2013监听客户请求
- ServerSocket serverSocket =new ServerSocket(2013);
- while (true) {
- // 侦听并接受到此Socket的连接,请求到来则产生一个Socket对象,并继续执行
- Socket socket = serverSocket.accept();
-
- /** 获取客户端传来的信息 */
- // 由Socket对象得到输入流,并构造相应的BufferedReader对象
- BufferedReader bufferedReader =new BufferedReader(new InputStreamReader(socket.getInputStream()));
- // 获取从客户端读入的字符串
- String result = bufferedReader.readLine();
- System.out.println("Client say : " + result);
-
- /** 发送服务端准备传输的 */
- // 由Socket对象得到输出流,并构造PrintWriter对象
- PrintWriter printWriter =new PrintWriter(socket.getOutputStream());
- printWriter.print("hello Client, I am Server!");
- printWriter.flush();
-
- /** 关闭Socket*/
- printWriter.close();
- bufferedReader.close();
- socket.close();
- }
- }catch (Exception e) {
- System.out.println("Exception:" + e);
- }finally{
- // serverSocket.close();
- }
- }
- }
复制代码 |
|