javajava sockett的问题

java socket卡死的问题?
[问题点数:20分,结帖人rzty007]
java socket卡死的问题?
[问题点数:20分,结帖人rzty007]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关帖子推荐:
2012年10月 Java大版内专家分月排行榜第三2012年6月 Java大版内专家分月排行榜第三
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。&& &文章主题:
交流经验:25
总积分:175
级别:普通会员
java socket连接池的问题
应用场景:
前端使用JSF作为表现层,浏览器客户端发出请求时我必须先通过socket与集群服务器进行通信之后在将服务器的响应信息进行解析再展现给客户端,为了减少系统开销,我打算在socket这一层使用socket连接池的方式实现。
但是目前遇到一个问题,我从池中取出一个socket后不能判断出该socket是否已经被服务器端关闭了连接,如果服务器端已经关闭了连接,我必须创建一个新的socket,然后对上一次发送失败的请求进行重发处理。
但是,在判断socket是否已经被服务器端关闭这一点,开始是实在做不到
JAVA API中的socket.isClosed(),socket.isConnected(),以及socket.sendUrgentData()检测的方式都不起作用。
java代码:
package com.duoguo.
import java.io.BufferedR
import java.io.FileR
import java.io.IOE
import java.io.InputStreamR
import java.io.PrintW
import java.net.S
import java.util.LinkedL
import java.util.L
* @author shyboy(chao.)
public class ConnectionPoolHandler implements Runnable {
@SuppressWarnings(&unchecked&)
private static List pool = new LinkedList();
* 处理连接
public void handleConnection() {
PrintWriter out = new PrintWriter(socket.getOutputStream());
BufferedReader in = new BufferedReader(new InputStreamReader(socket
.getInputStream()));
String line = in.readLine();
BufferedReader bufferedReader = new BufferedReader(new FileReader(
String value =
while ((value = bufferedReader.readLine()) != null) {
out.println(value);
bufferedReader.close();
out.close();
in.close();
} catch (IOException e) {
e.printStackTrace();
@SuppressWarnings(&unchecked&)
public static void processRequest(Socket socket) {
synchronized (pool) {
pool.add(pool.size(), socket);
pool.notifyAll();
* (non-Javadoc)
* @see java.lang.Runnable#run()
public void run() {
while (true) {
synchronized (pool) {
while (pool.isEmpty()) {
pool.wait();
} catch (InterruptedException e) {
e.printStackTrace();
socket = (Socket) pool.remove(0);
handleConnection();
package com.duoguo.
import java.io.IOE
import java.net.ServerS
import java.net.S
import com.duoguo.util.ConnectionPoolH
* @author shyboy(chao.)
public class PoolMultiServer {
private int maxC// 最大连接数
private int listenerP// 监听端口号
private ServerSocket serverS
* 构造方法
* @param maxConnecti
* :最大连接数
* @param listenerPort
* :监听端口号
public PoolMultiServer(int maxConnecti, int listenerPort) {
this.maxConnecti = maxC
this.listenerPort = listenerP
* 接受连接
public void acceptConnection() {
serverSocket = new ServerSocket(listenerPort, maxConnecti);
while (true) {
Socket socket = serverSocket.accept();
handleConnection(socket);
} catch (IOException e) {
e.printStackTrace();
* 处理连接
* @param socket
* :套接字
public void handleConnection(Socket socket) {
ConnectionPoolHandler.processRequest(socket);
public void setUpHandlers() {
for (int i = 0; i & maxC i++) {
ConnectionPoolHandler connectionPoolHandler = new ConnectionPoolHandler();
new Thread(connectionPoolHandler, &处理器& + i).start();
* @param args
public static void main(String[] args) {
PoolMultiServer poolMultiServer = new PoolMultiServer(5, 9999);
poolMultiServer.setUpHandlers();
poolMultiServer.acceptConnection();
package com.duoguo.
import java.io.BufferedR
import java.io.IOE
import java.io.InputStreamR
import java.io.PrintW
import java.net.S
import java.net.UnknownHostE
* @author shyboy(chao.)
public class Client {
private String hostIp;// 客户端主机IP
private int hostP// 客户端主机端口号
private BufferedR// 客户端输入流
private PrintW// 客户端输出流
* 构造方法
* @param hostip
* :IP地址
* @param hostPort
* :端口号
public Client(String hostip, int hostPort) {
this.hostIp =
this.hostPort = hostP
* 建立连接
public void setUpConnection() {
Socket client = new Socket(hostIp, hostPort);
in = new BufferedReader(new InputStreamReader(client
.getInputStream()));// 客户端输入流
out = new PrintWriter(client.getOutputStream());// 客户端输出流
} catch (UnknownHostException e) {
System.out.println(&找不到相应的主机!&);
e.printStackTrace();
} catch (IOException e) {
System.out.println(&抛出相应的流异常信息&);
e.printStackTrace();
* 获取文件
* @param fileName
* :文件名称
* @return String
public String getFile(String fileName) {
StringBuilder sb = new StringBuilder();
out.println(fileName);
out.flush();
String line =
System.out.println(&客户端连接成功!&);
while ((line = in.readLine()) != null) {
sb.append(line + &\n&);
} catch (IOException e) {
System.out.println(&文件读入失败!&);
e.printStackTrace();
return sb.toString();
* 断开连接
public void tearDownConnection() {
out.close();// 关闭输出流
in.close();// 关闭输入流
} catch (IOException e) {
System.out.println(&断开连接失败!&);
e.printStackTrace();
* @param args
public static void main(String[] args) {
Client client = new Client(&127.0.0.1&, 9999);
client.setUpConnection();
String fileContent = client.getFile(&D:\\hello.txt&);
System.out.println(&文件内容为:& + &\n& + fileContent);
client.tearDownConnection();
精品视频课程推荐
JavaScript的内置对象--Array、String、Date、Math等,可以通过DOM对象进行对象控制,创建控制菜单及复选框的控制,创建二级联动列表框及列表框选项的移动,JavaScript项目,创建基于JS的商品管理系统。
本视频课程是北京Java私塾原创精品书籍《研磨设计模式》一书的配套学习视频,由《研磨设计模式》的第一作者CC录制
课程目标:全面、系统的掌握GoF设计模式的知识,达到可以在实际项目开发中运用的能力
技术要点:如何实现可配置、如何实现缓存以及缓存的管理、如何实现用缓存来控制多实例的创建、如何实现参数化工厂、 如何实现可扩展工厂、如何实现原型管理器、如何实现Java的静态代理和动态代理、如何实现多线程处理队列请求、 如何实现命令的参数化配置、可撤销的操作、宏命令、队列请求和日志请求、如何实现翻页迭代、如何检测环状结构、 如何实现通用的增删改查、如何模拟工作流来处理流程、如何实现简单又通用的XML读取、如何实现模拟AOP的功能......
内容概述:Shiro是目前最热门、最易用、功能超强大的Java权限管理框架,强烈推荐,每个项目都必备的权限管理技术!通过本课程,你将从零开始直到彻底掌握Shiro的相关开发知识,达到可以进行实际项目开发的能力。包括:权限管理基础、Shiro入门、配置、身份认证、授权、Realms、Session管理、和Spring的集成、Web、Cache等众多开发细节技术
技术要点:源码级分析Shiro的授权过程、自定义开发Realm、多个Realms的开发配置、自定义开发AuthenticationStrategy、自定义开发自定义SessionDAO、和Struts2+Spring3的集成(包括修正struts2的bug)、Shiro和SpringMVC+Spring3的集成、包装使用其他的Cache框架、缓存数据同步更新的解决方案等等实际开发中常用的内容
深入浅出的讲解JavaBen的写法、JavaBean的用法、JavaBean的实现机制、JavaBean对应翻译的代码理解。
中国移动科技综合管理系统,对JDBC实现CRUD的抽象化和复用化;UUID自动生成;分层开发、综合示范Jsp+Servlet+JavaBean+TagLib+JSTL+JDBC的实现;Web分页、Web树、日期控件、真实值和表现值转换;众多杂项技术的实现,比如:tab、左右选择等等
个性签名:/
选择一个版面
软件设计专版
Web前端技术
学习问题讨论
面试、就业
版权所有 Copyright(C) 私塾在线学习网一个很棘手java的Socket通信问题
[问题点数:20分,结帖人java2000_net]
一个很棘手java的Socket通信问题
[问题点数:20分,结帖人java2000_net]
只显示楼主
取消只显示楼主
相关帖子推荐:
本帖子已过去太久远了,不再提供回复功能。当前位置: >
> 请教一个javasocket的问题,为何server端读不到client端发送过来的消息,有什么办
请教一个javasocket的问题,为何server端读不到client端发送过来的消息,有什么办
pangkui23 & at
请教一个java socket的问题,为何server端读不到client端发送过来的消息,有什么办法可以解决server端:
public&class&IS&{
ServerSocket&server&=&
Socket&client&=&
public&static&void&main(String[]&args)&{
new&IS().sendAndRecv();
public&void&sendAndRecv()&{
server&=&new&ServerSocket(8003);
while&(true)&{
client&=&server.accept();
OutputStream&os&=&client.getOutputStream();
InputStream&is&=&client.getInputStream();
int&size&=&is.available();
byte[]&a&=&new&byte[size];
is.read(a);
String&strque&=&new&String(a);
System.out.println(strque);
os.write("lisi&he&zhangsan&ye!".getBytes());
os.flush();
}&catch&(IOException&e)&{
//&TODO&Auto-generated&catch&block
e.printStackTrace();
client端:
public&class&IC&{
Socket&client&=&
public&static&void&main(String[]&args)&{
new&IC().sendAndRecv();
public&void&sendAndRecv()&{
client&=&new&Socket("127.0.0.1",&8003);
OutputStream&os&=&client.getOutputStream();
InputStream&is&=&client.getInputStream();
os.write("zhangsan&he&li&si&is&firend".getBytes());
os.flush();
int&size&=&is.available();
byte[]&a&=&new&byte[size];
is.read(a);
String&strque&=&new&String(a);
System.out.println(strque);
}&catch&(UnknownHostException&e)&{
//&TODO&Auto-generated&catch&block
e.printStackTrace();
}&catch&(IOException&e)&{
//&TODO&Auto-generated&catch&block
e.printStackTrace();
客户端读的时候需要等待一段时间才会有值的,
  public&class&Server&{
ServerSocket&server&=&
Socket&client&=&
public&static&void&main(String[]&args)&{
new&Server().sendAndRecv();
public&void&sendAndRecv()&{
server&=&new&ServerSocket(8003);
while&(true)&{
client&=&server.accept();
System.out.println(client.getInetAddress()&+&"已连接......");
OutputStream&os&=&client.getOutputStream();
InputStream&is&=&client.getInputStream();
int&i&=&-1;
byte[]&buf&=&new&byte[1024];
i&=&is.read(buf);
System.out.println(new&String(buf,&0,&i));
System.out.println("信息已经读取完成.");
os.write("hello&world!".getBytes());
os.flush();
os.close();
}&catch&(IOException&e)&{
e.printStackTrace();
public&class&Client&{
Socket&client&=&
public&static&void&main(String[]&args)&{
new&Client().sendAndRecv();
public&void&sendAndRecv()&{
client&=&new&Socket("127.0.0.1",&8003);pangmugua & &
& & (0)(0)
本问题标题:
本问题地址:
温馨提示:本问题已经关闭,不能解答。
暂无合适的专家
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&&&湘教QS2-164&&增值电信业务经营许可证湘B2-Outlook&Express&套接字错误:&),&错误号:&0x800CCC0E
工作中遇到如下错误
&"无法连接到服务器, 帐户:
'.cn', 服务器: '.cn', 协议: POP3, 端口: 110, 安全(SSL): 否,
套接字错误: 10060(或者为10061), 错误号: 0x800CCC0E"此类错误均为Windows
Sockets错误,“套接口(Socket),一个套接口是通讯的一端。在这一端上你可以找到与其对应的一个名字。一个正在被使用的套接口都有它的类型和与其相关的进程。”
解决办法:修复Win Sockets接口,重启后OK...
&&&&&&&&&&小工具WinsockXPFix
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 java http socket 的文章

 

随机推荐