关于java客户机多线程问题,如何将一个单线程的改变为多线程

C_amateur 2015-10-25 05:27:06
这是《自顶向下》书里的一个例子,实现功能是客户机输入一个字母后,服务器将其变为大写,并返回给客户机。
我将这个服务器改编为多线程。大家看有什么问题,或者帮我改写一个多线程,我对照研究一下
原服务器代码:
package tcpserver;
import java.io.*;
import java.net.*;
public class TCPServer {
public static void main(String[] argv) throws IOException {
String clientSentence;
String capitalizedSentence;
ServerSocket welcomeSocket = new ServerSocket(80);
while(true){
Socket connectionSocket = welcomeSocket.accept();
BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream());
clientSentence = inFromClient.readLine();

capitalizedSentence = clientSentence.toUpperCase()+'\n';
outToClient.writeBytes(capitalizedSentence);
}
}

}


改变为多线程后:

package threadedserver;
import java.io.*;
import java.util.*;
import java.net.*;
import java.util.logging.Level;
import java.util.logging.Logger;

class Handler implements Runnable {
Socket welcomeSocket;
String clientSentence;
String capitalizedSentence;
public Handler(Socket s) throws IOException {
Thread t;
welcomeSocket = s;
ServerSocket welcomeSocket = new ServerSocket(80);
t = new Thread(this, "Handler Thread");
t.start();
}
public void run() {
while(true){
try {

Socket connectionSocket = welcomeSocket.accept();
BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream());
clientSentence = inFromClient.readLine();
capitalizedSentence = clientSentence.toUpperCase()+'\n';
outToClient.writeBytes(capitalizedSentence);
} catch (IOException ex) {
Logger.getLogger(Handler.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}

public class ThreadedServer extends Thread {


public static void main(String[] args) {

Handler sever=new Handler();
}

}


错误有:1.Socket connectionSocket = welcomeSocket.accept();没有accept这个方法
2.Handler sever=new Handler(); 这个是错误的

希望高手指导
...全文
180 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
skgary 2015-10-26
  • 打赏
  • 举报
回复
引用 1 楼 rumlee 的回复:
你这不叫多线程,还是单线程处理的,只不过是从主线程另起了一个线程而已啊。 你应该服务端每收到一个链接,开一个线程,然后由这个线程处理,当然你做成线程池的方式就更好了。 当然这些只是作为练习用的。如果是真实应用的开发,还是建议采用netty、mina之类的第三方的nio解决方案,性能好而且稳定。
老实说,netty,mina适用于连接数需求较多的场景。 如果只是百把个连接以下的场景,建议还是老的socket用用就可以了,开发,调试,测试都简单。
rumlee 2015-10-26
  • 打赏
  • 举报
回复
你这不叫多线程,还是单线程处理的,只不过是从主线程另起了一个线程而已啊。 你应该服务端每收到一个链接,开一个线程,然后由这个线程处理,当然你做成线程池的方式就更好了。 当然这些只是作为练习用的。如果是真实应用的开发,还是建议采用netty、mina之类的第三方的nio解决方案,性能好而且稳定。

62,614

社区成员

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

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