一个关于线程池的问题。。大家帮看看代码

liangxiongqian 2010-02-26 11:34:51
用socket做个通讯 这个是服务端 为什么就接受不到客户端发送的数据呢???
大家帮我写一个客户端吧。。。。。


import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.*;

public class imServer{

private int port=8000;
private ServerSocket server;
private ExecutorService esc;
private int pool_size=4;
public imServer() throws Exception{
server =new ServerSocket(port);
esc=Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()*pool_size);

}
public void server() {
Socket sc=null;
while(true){
try {
sc=server.accept();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {

e.printStackTrace();
}
esc.execute(new Handler(sc));
} catch (IOException e) {

e.printStackTrace();
}

}
}
public static void main(String s[]){
try {
new imServer().server();
} catch (Exception e) {

e.printStackTrace();
}
}
}

class Handler implements Runnable{
private Socket sc=null;
static String msg=null;
DataInputStream read;
static DataOutputStream write;
public Handler( Socket sc) throws IOException{
this.sc=sc;
read=getReader(sc);
write=getWriter(sc);
}
public void run(){
try{
System.out.print(1230);
Thread.sleep(1000);
while(true){
msg=read.readUTF();
System.out.print(msg);
new Thread(new write()).start();
}
}catch(Exception e){
e.printStackTrace();
}finally{
try{
if(sc!=null)sc.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
public static void send(){
if(!msg.equals(null)){
try {
write.writeUTF(msg);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
private DataOutputStream getWriter(Socket sc) throws IOException{

return new DataOutputStream(
new BufferedOutputStream(sc.getOutputStream()));
}
private DataInputStream getReader(Socket sc) throws IOException{

return new DataInputStream(new BufferedInputStream(sc
.getInputStream()));
}
}
class write implements Runnable{
public void run(){
Handler.send();
}

}
...全文
140 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
jafapple 2010-02-27
  • 打赏
  • 举报
回复
怎么接收不到信息?

你随便另外写一个测试用例跑客户端就可以啊,你不会是把客户端代码放在你new imServer().server(); 后面吧,那肯定是执行不到的

public class As extends TestCase {
public void test(){
try{
Socket socket = new Socket("127.0.0.1", 8000);
DataOutputStream out = new DataOutputStream(socket.getOutputStream());

while (true) {
out.write("hello world".getBytes());
}
}catch(Exception e) {

}
}
siple 2010-02-27
  • 打赏
  • 举报
回复
看看,学习一下

Socket
liangxiongqian 2010-02-27
  • 打赏
  • 举报
回复
引用 5 楼 javaalpha 的回复:
楼主 参考 看看
http://www.java114.com/content19/content758.htmlhttp://xhinker.com/2009/09/05/JavaSocket%E9%80%9A%E4%BF%A1JAVA%E5%AE%9E%E7%8E%B0.aspxhttp://www.fzs8.net/Java/J2EE/2007-05-24/3954.htmlhttp://www.jspcn.net/htmlnews/11453816491561575.html

单线程的我会。。。。
到了多线程 用到线程池就有问题了 他不报错 也接受不到信息 郁闷。。。
liangxiongqian 2010-02-27
  • 打赏
  • 举报
回复
楼上的 可以把完整代码贴出来吗???
你那个父类是啥
  • 打赏
  • 举报
回复
telnet localhost 8000

这个命令就能测试了啊
liangxiongqian 2010-02-26
  • 打赏
  • 举报
回复
是我问的 。。。
找人来帮我解决吧。。
sotom 2010-02-26
  • 打赏
  • 举报
回复
Socket 是在不擅长,呵呵

能猫这个是你问的??
alonecong 2010-02-26
  • 打赏
  • 举报
回复
猫猫我顶你,虽然我不会。呵呵。

62,619

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧