62,615
社区成员
发帖
与我相关
我的任务
分享
import ...
//static Logger log = Logger.getLogger(SocketClient.class.getName()); // 日志记录信息
private String hostName;
private int portNum;
private int delaySecond; // 发文接收返回报文延时
public SocketClient() {
this.hostName = "192.168.5.6";
this.portNum = 52114;
this.delaySecond = 15000;
}
private Socket getSocket() {
Socket socket = null;
try {
socket = new Socket(hostName, portNum);
} catch (UnknownHostException e) {
System.out.println("-->未知的主机名:" + hostName + " 异常");
} catch (IOException e) {
System.out.println("-hostName=" + hostName + " portNum=" + portNum
+ "---->IO异常错误" + e.getMessage());
}
return socket;
}
public String sendMessage(String strMessage) {
String str = "";
String serverString = "";
Socket socket;
try {
socket = getSocket();
// socket.setKeepAlive(true);
if (socket == null) { // 未能得到指定的Socket对象Socket通讯为空
return "查询超时";
}
PrintWriter out = new PrintWriter(socket.getOutputStream());
out.write(strMessage);
out.flush();
BufferedReader in = new BufferedReader(new InputStreamReader(socket
.getInputStream()));
long sendTime = System.currentTimeMillis();
long receiveTime = System.currentTimeMillis();
boolean received = false; // 成功接收报文
boolean delayTooLong = false;
serverString = null;
while (!received && !delayTooLong) {
if (socket.getInputStream().available() > 0) {
// serverString = in.readLine();
char tagChar[];
tagChar = new char[1024];
int len;
String temp;
String rev = "";
if ((len = in.read(tagChar)) != -1) {
temp = new String(tagChar, 0, len);
rev += temp;
temp = null;
}
serverString = rev;
}
receiveTime = System.currentTimeMillis();
if (serverString != null)
received = true; // 字符串不为空,接收成功
if ((receiveTime - sendTime) > delaySecond)
delayTooLong = true; // 接收等待时间过长,超时
}
// in.close();
// out.close();
str = serverString;
if (delayTooLong){
//str = "2190"; // 超时标志为真,返回超时码
str="超时";
}
// if (
// ..}
in.close();
out.close();
str = serverString;
if (delayTooLong)
//str = "2190"; // 超时标志为真,返回超时码
str="超时";
if (!received)
//str = "2190";
str="超时";
socket.close();
} catch (UnknownHostException e) {
// log.error("---->出现未知主机错误! 主机信息=" + this.hostName + " 端口号="
// + this.portNum + " 出错信息=" + e.getMessage());
str = "2191";
// System.exit(1);
} catch (IOException e) {
// log.error("---->出现IO异常! 主机信息=" + this.hostName + " 端口号="
// + this.portNum + " 出错信息=" + e.getMessage());
e.printStackTrace();
str = "2191";
} catch (Exception e) {
str = "2177";
// log.error("---->出现未知异常" + e.getMessage());
} finally {
socket = null;
str.trim();
// log.info("--->返回的socket通讯字符串="+str);
}
return str;
}
}
/**
*多线程socket服务端
* @author 49
*/
package socketThread;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
//import java.io.PrintWriter;
import java.net.*;
import java.util.concurrent.*;
import wcdjsrc.dbSocket;
import javax.swing.*;
public class serverSocket {
private int port=10000;
private ServerSocket serverSocket;
private ExecutorService executorService;//线程池
private final int POOL_SIZE=10;//单个CPU线程池大小
public serverSocket() throws IOException{
serverSocket=new ServerSocket(port);
//Runtime的availableProcessor()方法返回当前系统的CPU数目.
executorService=Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()*POOL_SIZE);
System.out.println("服务器启动");
}
public void service(){
while(true){
Socket socket=null;
try {
//接收客户连接,只要客户进行了连接,就会触发accept();从而建立连接
socket=serverSocket.accept();
executorService.execute(new Handler(socket));
} catch (Exception e) {
e.printStackTrace();
}
}
}
// public static void main(String[] args) throws IOException {
// new serverSocket().service();
// }
}
class Handler implements Runnable{
private Socket socket;
private dbSocket ds=null;
public Handler(Socket socket){
this.socket=socket;
}
private PrintStream getWriter(Socket socket) throws IOException{
OutputStream socketOut=socket.getOutputStream();
return new PrintStream(socketOut,true,"UTF-8");
}
private BufferedReader getReader(Socket socket) throws IOException{
InputStream socketIn=socket.getInputStream();
return new BufferedReader(new InputStreamReader(socketIn,"UTF-8"));
}
public String echo(String msg){
return "echo:"+msg;
}
public void run(){
try {
System.out.println("New connection accepted "+socket.getInetAddress()+":"+socket.getPort());
BufferedReader br=getReader(socket);
PrintStream pw=getWriter(socket);
String msg=null;
String pwwords="";
while((msg=br.readLine())!=null){
System.out.println(msg);//接收到的数据
pwwords = "leaderusertrue";
pw.print(pwwords);//返回给手机端的数据
// br.close();
// socket.close();
}
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
if(socket!=null)
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}