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()
*/
@Override
public 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()
*/
@Override
public 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();
}
}
}
}