JAVA网络编程-IO之Socket

在继续记录NIO的学习之前,我觉得有必要先复习一下IO相关的知识。今天就说一下网络套接字Socket

废话不多说,先上代码,这里实现一个最简单的Echo功能,客户端发送一条消息服务端直接进行返回。

服务端:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

/**
 *  @Description:
 *  @author:xyq 
 *  @date:2018年6月6日
 */
public class Server {
	ServerSocket ss = null;
	
	public static void main(String[] args) {
		new Server().startServer();
	}
	public void startServer() {
		Socket socket = null;
		try {
			ss = new ServerSocket(1234); // 监听1234端口
			while (true) {
				socket = ss.accept();   // 堵塞式接受Socket
				new ServerThread(socket).start();  // 放入线程进行处理
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	class ServerThread extends Thread {
		Socket socket = null;
		public ServerThread(Socket socket){
			this.socket = socket;
		}
		/* (non-Javadoc)
		 * @see java.lang.Runnable#run()
		 */
		@Override
		public void run() {
			BufferedReader br = null;
			PrintWriter pw = null;
			try {
				pw = new PrintWriter(socket.getOutputStream());
				br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
				while (true) {
					String line = br.readLine();
					System.out.println("从客户端来的信息:" + line);
					pw.println("你好,服务器已经收到您的信息!'" + line + "'\n");
					pw.flush();
					System.out.println("已经返回给客户端!");
				}
			} catch (IOException e) {
				e.printStackTrace();
			} finally {
				try {
					pw.close();
					br.close();
					socket.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
				
			}
		}
		
	}
}

  

客户端:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

/**
 *  @Description:
 *  @author:xyq 
 *  @date:2018年6月6日
 */
public class Client {
	public static void main(String[] args) {
		new Client().startClient();
	}
	
	public void startClient() {
		Socket socket = null;
		BufferedReader br = null;
		PrintWriter pw = null;
		try {
			socket = new Socket("localhost", 1234);
			br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
			pw = new PrintWriter(socket.getOutputStream());
			String get = "客户端" + Math.random() * 1000;

			while (true) {
				if (get != null && get.length() > 0) {
					pw.println(get);   // 写入缓冲流
					pw.flush();         // 刷新缓冲
				}
				if (br != null) {
					String line = br.readLine();
					System.out.println("从服务器来的信息:" + line);
				}
				
				Thread.sleep(2000);
			}
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}

}

  

猜你喜欢

转载自www.cnblogs.com/kooker/p/9237133.html