java socket 全双工客户端_[Java教程]用socket模拟实现全双工通信

[Java教程]用socket模拟实现全双工通信

0 2017-04-04 00:00:14 //源码下载 http://download.csdn.net/detail/qq_24054661/9802994package com.tsocket.test;import java.io.*;import java.net.*;public class Client {public static void main(String[] args) throws UnknownHostException, IOException {Socket socket = new Socket("169.254.87.76",8888);new Thread(new Send(socket)).start();new Thread(new Receive(socket)).start();/*String info = "客户端要连接!";BufferedWriter br = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));br.write(info);br.newLine();br.flush();*/}}package com.tsocket.test;import java.io.*;import java.net.*;public class Server {public static void main(String[] args) throws IOException {ServerSocket server = new ServerSocket(8888);Socket socket = server.accept();new Thread(new Send(socket)).start();new Thread(new Receive(socket)).start();//new Server().start();/*Socket socket = server.accept();DataInputStream dis = new DataInputStream(socket.getInputStream());DataOutputStream dos = new DataOutputStream(socket.getOutputStream());while(true){String info = dis.readUTF();System.out.println("服务器-->"+info);dos.writeUTF("服务器:--->"+info);}*/}public void start() throws IOException{ServerSocket server = new ServerSocket(8888);while(true){Socket socket = server.accept();MyChannel channel = new MyChannel(socket);new Thread(channel).start();}}private class MyChannel implements Runnable{private BufferedReader br ;private DataInputStream dis;private DataOutputStream dos;private boolean isRunning = true;private String Msg = null;@Overridepublic void run() {while(isRunning){Receive();Send();}}private String getMsg(){try {return br.readLine();} catch (IOException e) {return null;}}public MyChannel (Socket socket){br = new BufferedReader(new InputStreamReader(System.in));try {dis = new DataInputStream(socket.getInputStream());dos = new DataOutputStream(socket.getOutputStream());} catch (IOException e) {CloseUtil.closeAll(dis,dos); isRunning = false;}}private String Receive(){try{Msg = dis.readUTF();}catch(Exception e){CloseUtil.closeAll(dis,dos);isRunning = false;}return Msg;}private void Send(){String Msg=null;try {Msg = br.readLine();} catch (IOException e1) {//e1.printStackTrace();}if(Msg==null||Msg.equals("")){return;}try{dos.writeUTF(Msg);dos.flush();}catch(Exception e){CloseUtil.closeAll(dis,dos);isRunning = false;}}}}

package com.tsocket.test;import java.io.*;import java.net.*;public class Receive implements Runnable {private boolean isRunning = true;private DataInputStream dis;public Receive(Socket s){try {dis = new DataInputStream(s.getInputStream());} catch (IOException e) {isRunning = false;CloseUtil.closeAll(dis);}}public String receive(){String Msg="";try {Msg=dis.readUTF();} catch (IOException e) {isRunning = false;CloseUtil.closeAll(dis);}return Msg;}@Overridepublic void run() {while(isRunning){System.out.println(receive());}}}

package com.tsocket.test;import java.io.Closeable;public class CloseUtil {public static void closeAll(Closeable...io){for(Closeable temp :io){try{if(null!=temp){temp.close();}}catch(Exception e){e.printStackTrace();}}}}

package com.tsocket.test;import java.io.*;import java.net.*;public class Send implements Runnable {private BufferedReader br ;private DataOutputStream dos;private boolean isRunning = true;public Send(Socket socket){br = new BufferedReader(new InputStreamReader(System.in));try {dos = new DataOutputStream(socket.getOutputStream());} catch (IOException e) {isRunning = false;CloseUtil.closeAll(dos,br);}}private String getMsg(){try {return br.readLine();} catch (IOException e) {return null;}}public void send(){String Msg = getMsg();if(Msg!=null&&!Msg.equals("")){try {dos.writeUTF(Msg);dos.flush();} catch (IOException e) {isRunning = false;CloseUtil.closeAll(dos,br);}}}@Overridepublic void run() {while(isRunning){send();}}}

本文网址:http://www.shaoqun.com/a/305592.html

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:admin@shaoqun.com。

socket

0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值