java socket 服务端 怎样将发送和接收数据分开写(多线程) 多客户端。java socket 服务端 怎样将发送和接收数据分开写(多线程),并且判断客户端是否连接或者断开。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在服务端为每个客户端开一个线程,对客户端的信息进行转发,如果你不是用的NIO,发送和接收数据分开不了,都是阻塞的操作 lz 打算用长连接还是短连接?短连接的话,C给S发一句话,S回个"收到"的消息然后断开。 另外,需要一个类似SessionID的东西,来确定C是哪个。长连接的话,长时间开着吧,处理好交互,不过 这种方式比较占资源。 package socket;import java.io.*;import java.net.InetAddress;import java.net.Socket;import java.util.*;// Referenced classes of package socket:// Getdata, WriteIpPortpublic class PooledConnectHandler implements Runnable { public static List<Socket> list = new ArrayList<Socket>(); protected static Socket connection; protected static String ordertype; protected static String msgdata; protected static List pool = new LinkedList(); public PooledConnectHandler() { } public void handleConnection() { if (ordertype.equals("GET")) { try { BufferedReader buff = new BufferedReader(new InputStreamReader( connection.getInputStream())); PrintWriter pw = new PrintWriter(connection.getOutputStream(), true); pw.println("Start data transfer."); String d = ""; int c; while ((c = buff.read()) != 0) { char a = (char) c; d = (new StringBuilder(String.valueOf(d))).append(a) .toString(); if (d.equals(":531A") || d.equals("530A")) { d = ""; } if (d.length() == 65) { if (Getdata.getdata1(d)) { pw.println("Stop data transfer."); } d = ""; } } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } if (ordertype.equals("ON")) { try { BufferedReader buff = new BufferedReader(new InputStreamReader( connection.getInputStream())); PrintWriter pw = new PrintWriter(connection.getOutputStream(), true); pw.println(msgdata); String d = ""; int c; while ((c = buff.read()) != 0) { char a = (char) c; d = (new StringBuilder(String.valueOf(d))).append(a) .toString(); if (!d.equals(":510B")) { d.equals(":520B"); } } } catch (FileNotFoundException filenotfoundexception) { } catch (IOException ioexception) { } } if (ordertype.equals("OFF")) { try { BufferedReader buff = new BufferedReader(new InputStreamReader( connection.getInputStream())); PrintWriter pw = new PrintWriter(connection.getOutputStream(), true); pw.println(msgdata); String d = ""; int c; while ((c = buff.read()) != 0) { char a = (char) c; d = (new StringBuilder(String.valueOf(d))).append(a) .toString(); if (!d.equals(":510A")) { d.equals(":520A"); } } } catch (FileNotFoundException filenotfoundexception1) { } catch (IOException ioexception1) { } } if (ordertype.equals("SEARCH")) { try { BufferedReader buff = new BufferedReader(new InputStreamReader( connection.getInputStream())); PrintWriter pw = new PrintWriter(connection.getOutputStream(), true); pw.println("Machine No."); String d = ""; int c; while ((c = buff.read()) != 0) { char a = (char) c; d = (new StringBuilder(String.valueOf(d))).append(a) .toString(); if (d.length() == 7) { System.out.print(d); if (d.substring(0, 3).equals(":5E")) { if (WriteIpPort.saveip(connection.getInetAddress() .toString(), connection.getPort(), d .substring(3, 7))) { System.out .print("\u5BA2\u6237\u7AEF\u5730\u5740\u5DF2\u7ECF\u4FDD\u5B58\u5230\u6570\u636E\u5E93"); } else { System.out .print("\u5BA2\u6237\u7AEF\u5730\u5740\u4FDD\u5B58\u5931\u8D25"); } d = ""; } } } } catch (IOException e) { e.printStackTrace(); } } if (ordertype.equals("SET")) { try { BufferedReader buff = new BufferedReader(new InputStreamReader( connection.getInputStream())); PrintWriter pw = new PrintWriter(connection.getOutputStream(), true); pw.println((new StringBuilder("P_SET:")).append(msgdata) .toString()); String d = ""; int c; while ((c = buff.read()) != 0) { char a = (char) c; d = (new StringBuilder(String.valueOf(d))).append(a) .toString(); d.equals(":5F00"); } } catch (FileNotFoundException filenotfoundexception2) { } catch (IOException ioexception2) { } } if (ordertype.equals("")) { try { BufferedReader buff = new BufferedReader(new InputStreamReader( connection.getInputStream())); PrintWriter pw = new PrintWriter(connection.getOutputStream(), true); String d = ""; int c; while ((c = buff.read()) != 0) { char a = (char) c; d = (new StringBuilder(String.valueOf(d))).append(a) .toString(); if (d.length() == 65) { Getdata.getdata1(d); d = ""; } } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } public static void processRequest(Socket requestToHandle, String ordertype, String msgdata) { synchronized (pool) { pool.add(pool.size(), requestToHandle); pool.add(pool.size(), ordertype); pool.add(pool.size(), msgdata); pool.notifyAll(); } } public void run() { do { synchronized (pool) { while (pool.isEmpty()) { try { pool.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } connection = (Socket) pool.remove(0); ordertype = (String) pool.remove(0); msgdata = (String) pool.remove(0); } handleConnection(); } while (true); }} 做增加和修改功能时,jsp页面上的值传到后台都为null struts1中的dispatchaction能带参数吗? 新闻编辑器 hibernate3里没有hbm2java的工具了吗 控件问题,怎么才能让控件不被另一个控件穿透 ext 上传进度条,怎么实现? 关于EL的问题(必结贴) 希望帮忙解决~~~困惑中........... 请问如何在jsp中播放一段声音? 如何控制浮点型的长度? 求一段JSP条件句的写法问题 urlrewrite 4.0 服务器发布问题
短连接的话,C给S发一句话,S回个"收到"的消息然后断开。 另外,需要一个类似SessionID的东西,来确定C是哪个。长连接的话,长时间开着吧,处理好交互,不过 这种方式比较占资源。
import java.net.InetAddress;
import java.net.Socket;
import java.util.*;// Referenced classes of package socket:
// Getdata, WriteIpPortpublic class PooledConnectHandler implements Runnable {
public static List<Socket> list = new ArrayList<Socket>(); protected static Socket connection; protected static String ordertype; protected static String msgdata; protected static List pool = new LinkedList(); public PooledConnectHandler() {
} public void handleConnection() { if (ordertype.equals("GET")) {
try {
BufferedReader buff = new BufferedReader(new InputStreamReader(
connection.getInputStream()));
PrintWriter pw = new PrintWriter(connection.getOutputStream(),
true);
pw.println("Start data transfer.");
String d = "";
int c;
while ((c = buff.read()) != 0) {
char a = (char) c;
d = (new StringBuilder(String.valueOf(d))).append(a)
.toString();
if (d.equals(":531A") || d.equals("530A")) {
d = "";
}
if (d.length() == 65) {
if (Getdata.getdata1(d)) {
pw.println("Stop data transfer.");
}
d = "";
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
if (ordertype.equals("ON")) {
try {
BufferedReader buff = new BufferedReader(new InputStreamReader(
connection.getInputStream()));
PrintWriter pw = new PrintWriter(connection.getOutputStream(),
true);
pw.println(msgdata);
String d = "";
int c;
while ((c = buff.read()) != 0) {
char a = (char) c;
d = (new StringBuilder(String.valueOf(d))).append(a)
.toString();
if (!d.equals(":510B")) {
d.equals(":520B");
}
}
} catch (FileNotFoundException filenotfoundexception) {
} catch (IOException ioexception) {
}
}
if (ordertype.equals("OFF")) {
try {
BufferedReader buff = new BufferedReader(new InputStreamReader(
connection.getInputStream()));
PrintWriter pw = new PrintWriter(connection.getOutputStream(),
true);
pw.println(msgdata);
String d = "";
int c;
while ((c = buff.read()) != 0) {
char a = (char) c;
d = (new StringBuilder(String.valueOf(d))).append(a)
.toString();
if (!d.equals(":510A")) {
d.equals(":520A");
}
}
} catch (FileNotFoundException filenotfoundexception1) {
} catch (IOException ioexception1) {
}
}
if (ordertype.equals("SEARCH")) {
try {
BufferedReader buff = new BufferedReader(new InputStreamReader(
connection.getInputStream()));
PrintWriter pw = new PrintWriter(connection.getOutputStream(),
true);
pw.println("Machine No.");
String d = "";
int c;
while ((c = buff.read()) != 0) {
char a = (char) c;
d = (new StringBuilder(String.valueOf(d))).append(a)
.toString();
if (d.length() == 7) {
System.out.print(d);
if (d.substring(0, 3).equals(":5E")) {
if (WriteIpPort.saveip(connection.getInetAddress()
.toString(), connection.getPort(), d
.substring(3, 7))) {
System.out
.print("\u5BA2\u6237\u7AEF\u5730\u5740\u5DF2\u7ECF\u4FDD\u5B58\u5230\u6570\u636E\u5E93");
} else {
System.out
.print("\u5BA2\u6237\u7AEF\u5730\u5740\u4FDD\u5B58\u5931\u8D25");
}
d = "";
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
if (ordertype.equals("SET")) {
try {
BufferedReader buff = new BufferedReader(new InputStreamReader(
connection.getInputStream()));
PrintWriter pw = new PrintWriter(connection.getOutputStream(),
true);
pw.println((new StringBuilder("P_SET:")).append(msgdata)
.toString());
String d = "";
int c;
while ((c = buff.read()) != 0) {
char a = (char) c;
d = (new StringBuilder(String.valueOf(d))).append(a)
.toString();
d.equals(":5F00");
}
} catch (FileNotFoundException filenotfoundexception2) {
} catch (IOException ioexception2) {
}
}
if (ordertype.equals("")) {
try {
BufferedReader buff = new BufferedReader(new InputStreamReader(
connection.getInputStream()));
PrintWriter pw = new PrintWriter(connection.getOutputStream(),
true);
String d = "";
int c;
while ((c = buff.read()) != 0) {
char a = (char) c;
d = (new StringBuilder(String.valueOf(d))).append(a)
.toString();
if (d.length() == 65) {
Getdata.getdata1(d);
d = "";
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} } public static void processRequest(Socket requestToHandle, String ordertype,
String msgdata) {
synchronized (pool) {
pool.add(pool.size(), requestToHandle);
pool.add(pool.size(), ordertype);
pool.add(pool.size(), msgdata);
pool.notifyAll();
}
} public void run() {
do {
synchronized (pool) {
while (pool.isEmpty()) {
try {
pool.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
connection = (Socket) pool.remove(0);
ordertype = (String) pool.remove(0);
msgdata = (String) pool.remove(0); }
handleConnection();
} while (true);
}}