Java Socket长链接 异步读写 实例

来源:互联网 发布:抓包8888端口干嘛的 编辑:程序博客网 时间:2024/05/18 00:47

1.Server端

package com.xxx.internet.server;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;import com.xxx.internet.util.DataProcessUtil;/** * @ClassName SocketServer * @Description 发布一个Socket Server端服务 * @Author weizhi2018 * @Date 2013-8-11 下午10:50:39 *  */public class SocketServerLong {public static void main(String[] args) {ServerSocket serverSocket = null;Socket socket = null;DataInputStream reader = null;DataOutputStream writer = null;String result;// 监听端口号int port = 8780;// 建立连接try {serverSocket = new ServerSocket(port);System.out.println("启动监听服务:" + port);socket = serverSocket.accept();System.out.println("建立连接,开始传输数据...");} catch (IOException e1) {e1.printStackTrace();}while (true) {try {// 接收客户端发送内容reader = new DataInputStream(socket.getInputStream());byte[] buff = new byte[1024];reader.read(buff);String recvStr = new String(buff, "UTF-8").trim();// 输出System.out.println("接收客户端请求内容为:" + recvStr);DataProcessUtil dataProcess = new DataProcessUtil(recvStr);result = dataProcess.dealParam();// 向客户端发送反馈内容writer = new DataOutputStream(socket.getOutputStream());System.out.println("服务端返回处理结果:" + result);byte[] bb = result.getBytes();writer.write(bb);writer.flush();} catch (Exception e) {e.printStackTrace();} finally {// 关闭输入输出流,关闭连接//try {//writer.close();//} catch (Exception e) {//e.printStackTrace();//}//try {//reader.close();//} catch (Exception e) {//e.printStackTrace();//}//try {//socket.close();//} catch (Exception e) {//e.printStackTrace();//}//System.out.println("服务结束,断开连接.");}}}}

2.Client 端

package com.xxx.internet.client;public class SocketMain {/** * @Title main * @Description 启动两个线程,一个用来定时发送数据,一个用来定时接收数据 * @Author weizhi2018 * @param @param args * @return void * @throws */public static void main(String[] args) {String ip = "127.0.0.1";int port = 8780;ConnSocket socket = null;socket = new ConnSocket(ip, port);System.out.println("IP:" + ip + ",端口:" + port + ",建立连接...");RecvThd recvThd = new RecvThd(socket);SendThd sendThd = new SendThd(socket);new Thread(sendThd).start();new Thread(recvThd).start();}}

3.发送数据的线程

package com.xxx.internet.client;public class SendThd implements Runnable {private ConnSocket socket = null;public SendThd(ConnSocket socket) {this.socket = socket;}/* * @see java.lang.Runnable#run() */@Overridepublic void run() {String sendData = "abcdefghijklmnopqrsguvwxyz1234567890';[]=-/,.~!@#$%^&*()_+<>?:";while (true) {System.out.println("-----");try {if (socket.getStatus()) {socket.send(sendData);System.out.println("发送数据:" + sendData);}Thread.sleep(3000);} catch (Exception e) {e.printStackTrace();}}}}

4.接收返回结果的线程

package com.xxx.internet.client;public class RecvThd implements Runnable {private ConnSocket socket = null;public RecvThd(ConnSocket socket) {this.socket = socket;}/* * @see java.lang.Runnable#run() */@Overridepublic void run() {while (true) {System.out.println("-----");try {String result = null;if (socket.getStatus()) {result = socket.recv();System.out.println("接收数据:" + result);}else {Thread.sleep(30);if (socket.getStatus()) {result = socket.recv();System.out.println("接收数据:" + result);}}Thread.sleep(3000);} catch (Exception e) {e.printStackTrace();}}}}


原创粉丝点击