socket双向通信

客服端(服务器端):

package socket.server;


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

public class Server3 {  

    public static final int PORT = 10000;//监听的端口号     

    public static void main(String[] args) {    
        System.out.println("sever begins");
        Server3 server = new Server3();    
        server.init();    
    }    

    public void init() {    
        ServerSocket serverSocket = null;  
        try {    
            serverSocket = new ServerSocket(PORT);    
            while (true) {    
                Socket client = serverSocket.accept();    
                //一个客户端连接就开两个线程分别处理读和写    
                new Thread(new ReadHandlerThread(client)).start();    
                new Thread(new WriteHandlerThread(client)).start();   
            }    
        } catch (Exception e) {    
            e.printStackTrace();    
        } finally{  
            try {  
                if(serverSocket != null){  
                    serverSocket.close();  
                }  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
        }  
    }    
}    

/*  
 *处理读操作的线程   
 */  
class ReadHandlerThread implements Runnable{  
    private Socket client=null;  

    public ReadHandlerThread(Socket client) {  
        this.client = client;  
    }  

    @Override  
    public void run() {  
        BufferedReader in = null;
        try{  
            while(true){  
                //读取客户端数据    
                in = new BufferedReader(new InputStreamReader(client.getInputStream()));
                System.out.println("客户端说:" + in.readLine());   
            }  
        }catch(Exception e){  
            e.printStackTrace();  
        }finally{  
            if(client != null){  
                client = null;  
            }  
        }  
    }  
}  

/*  
 * 处理写操作的线程  
 */  
class WriteHandlerThread implements Runnable{  
    private Socket client;  

    public WriteHandlerThread(Socket client) {  
        this.client = client;  
    }  

    @Override  
    public void run() {  
        PrintWriter out=null;
        try {
            out = new PrintWriter(client.getOutputStream());
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }  
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));//从控制台获取输入的内容 
        try{  
            while(true){  
                //向客户端回复信息    
                out.println(reader.readLine());
                out.flush();  
            }  
        }catch(Exception e){  
            e.printStackTrace();  
        }finally{  
            if(client != null){  
                client = null;  
            }  
        }  
    }  
}  

客户端(Client):
package socket.clinet;

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

public class Client3 {

public static final String IP = "localhost";//服务器地址   
public static final int PORT = 10000;//服务器端口号    

public static void main(String[] args) {

    handler();   
}  

private static void handler(){  
    try {       
        //实例化一个Socket,并指定服务器地址和端口  
        Socket client = new Socket(IP, PORT);  
        System.out.println("I am a client");    
        //开启两个线程,一个负责读,一个负责写  
        new Thread(new ReadHandlerThread(client)).start();  
        new Thread(new WriteHandlerThread(client)).start();  
    } catch (Exception e) {  
        e.printStackTrace();  
    }  
}  

}

/*
*处理读操作的线程
*/
class ReadHandlerThread implements Runnable{
private Socket client;

public ReadHandlerThread(Socket client) {  
    this.client = client;  
}  
@Override  
public void run() {  
    BufferedReader in = null;
    try {
        in = new BufferedReader(new InputStreamReader(client.getInputStream()));
    } catch (IOException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
    try {  
        while(true){ 
            System.out.println("服务器说:"+in.readLine());    
        }  
    } catch (IOException e) {  
        e.printStackTrace();  
    } finally{              
            if(client != null){  
                client = null;  
            }  
    }  
}  

}

/*
* 处理写操作的线程
*/
class WriteHandlerThread implements Runnable{
private Socket client;

public WriteHandlerThread(Socket client) {  
    this.client = client;  
}  

@Override  
public void run() {  
    PrintWriter out=null;
    try {
        out = new PrintWriter(client.getOutputStream());
    } catch (IOException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }                 
    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));//从控制台获取输入的内容  
    try {  
        while(true){  
            out.println(reader.readLine());  
            out.flush();
         }  
    } catch (IOException e) {  
        e.printStackTrace();     
    }
    try {
        client.close();
         reader.close();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    out.close();


}  

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值