原文地址:http://blog.csdn.net/yubo_725/article/details/45331487 感謝作者分享。
服務端代碼:
- package com.test.server;
- import java.io.DataInputStream;
- import java.io.DataOutputStream;
- import java.io.IOException;
- import java.net.ServerSocket;
- import java.net.Socket;
- public class Server {
- public static void main(String[] args) {
- new Server().startServer();
- }
- public void startServer(){
- try {
- //服務器在9990端口監聽客戶端的連接
- ServerSocket ss = new ServerSocket(9999);
- System.out.println("server is listening...");
- while(true){
- //阻塞的accept方法,當一個客戶端連接上,纔會返回Socket對象
- Socket s = ss.accept();
- System.out.println("a client has connected!");
- //開啓線程處理通信
- new CommunicateThread(s).start();
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- public class CommunicateThread extends Thread{
- Socket socket;
- DataInputStream dis;
- DataOutputStream dos;
- public CommunicateThread(Socket socket){
- this.socket = socket;
- try {
- dis = new DataInputStream(socket.getInputStream());
- dos = new DataOutputStream(socket.getOutputStream());
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- @Override
- public void run() {
- super.run();
- //讀取客戶端發過來的消息
- String msg = null;
- try {
- while((msg = dis.readUTF()) != null){
- System.out.println("client send msg :" + msg);
- String replyMsg = "server reply : " + msg;
- dos.writeUTF(replyMsg);
- System.out.println("server reply msg :" + replyMsg);
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- }
- package com.test.client;
- import java.io.DataInputStream;
- import java.io.DataOutputStream;
- import java.io.IOException;
- import java.net.Socket;
- import java.util.Scanner;
- public class Client {
- public static void main(String[] args) {
- new Client().startClient();
- }
- public void startClient(){
- try {
- //連接到服務器
- Socket socket = new Socket("localhost", 9999);
- DataInputStream dis = new DataInputStream(socket.getInputStream());
- DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
- Scanner scanner = new Scanner(System.in);
- String line = null;
- listenServerReply(dis);
- while((line = scanner.nextLine()) != null){//讀取從鍵盤輸入的一行
- dos.writeUTF(line);//發給服務端
- System.out.println("client send msg : " + line);
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- //監聽服務端回覆的消息
- public void listenServerReply(final DataInputStream dis){
- new Thread(){
- @Override
- public void run() {
- super.run();
- String line = null;
- try {
- while((line = dis.readUTF()) != null){
- System.out.println("client receive msg from server: " + line);
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }.start();
- }
- }