原文地址: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();
- }
- }