出错原因,在client启动的时候就关闭了,不知道为什么,能帮我看一下么最好帮忙总结一下socket常见的注意事项Client代码 private static final String HOST = "localhost"; private static final int PORT = 6161; private Socket socket; public Client() {
socket = new Socket();
InetSocketAddress addr = new InetSocketAddress(HOST,PORT);
try {
socket.connect(addr);
} catch (IOException e) {
e.printStackTrace();
}
} public void handle() throws UnknownHostException, IOException {
PrintWriter out = getWriter(socket);
out.write("hello server");
} public PrintWriter getWriter(Socket socket) throws IOException {
OutputStreamWriter osr = new OutputStreamWriter(socket
.getOutputStream());
return new PrintWriter(osr, true);
} public BufferedReader getReader(Socket socket) throws IOException {
InputStreamReader is = new InputStreamReader(socket.getInputStream());
return new BufferedReader(is);
}
public static void main(String[] args) throws UnknownHostException,
IOException {
new Client().handle();
}Server代码
private static final int PORT = 6161; private ServerSocket serSocket;
private int poolSize = 3;
private Executor exec = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()*poolSize); public Server() throws IOException {
serSocket = new ServerSocket();
bind(serSocket);
} public void server() throws IOException {
Socket socket = null;
while (true) {
try {
socket = serSocket.accept();
socket.setSoTimeout(50000);
System.out.println("New connection accepte"+ socket.getInetAddress() + ":" + socket.getPort());
//exec "i/o"
exec.execute(new ServerHandler(socket));
} catch (Exception e) {
} finally {
if(socket!=null){
socket.close();
}
}
}
} public void bind(ServerSocket serSocket) throws IOException{
serSocket.bind(new InetSocketAddress(PORT));
System.out.println("服务器启动");
}
public static void main(String[] args) throws IOException {
new Server().server();
}
ServerHandler代码public class ServerHandler implements Runnable { private Socket socket; public ServerHandler(Socket socket) {
this.socket = socket;
} public PrintWriter getWriter(Socket socket) throws IOException {
OutputStreamWriter osr = new OutputStreamWriter(socket
.getOutputStream());
return new PrintWriter(osr, true);
} public BufferedReader getReader(Socket socket) throws IOException {
InputStreamReader is = new InputStreamReader(socket.getInputStream());
return new BufferedReader(is);
} public void handle() throws IOException {
BufferedReader reader = getReader(socket);
String msg = "";
int i = 0;
while ((msg = reader.readLine()) != null) {
System.out.println("the message come from client -->" + msg);
}
++i;
PrintWriter out = getWriter(socket);
out.write("Server accepted times -->" + i);
reader.close();
out.close();
} public void run() {
try {
handle();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (socket != null) {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}在线求助
socket = new Socket();
InetSocketAddress addr = new InetSocketAddress(HOST,PORT);
try {
socket.connect(addr);
} catch (IOException e) {
e.printStackTrace();
}
} public void handle() throws UnknownHostException, IOException {
PrintWriter out = getWriter(socket);
out.write("hello server");
} public PrintWriter getWriter(Socket socket) throws IOException {
OutputStreamWriter osr = new OutputStreamWriter(socket
.getOutputStream());
return new PrintWriter(osr, true);
} public BufferedReader getReader(Socket socket) throws IOException {
InputStreamReader is = new InputStreamReader(socket.getInputStream());
return new BufferedReader(is);
}
public static void main(String[] args) throws UnknownHostException,
IOException {
new Client().handle();
}Server代码
private static final int PORT = 6161; private ServerSocket serSocket;
private int poolSize = 3;
private Executor exec = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()*poolSize); public Server() throws IOException {
serSocket = new ServerSocket();
bind(serSocket);
} public void server() throws IOException {
Socket socket = null;
while (true) {
try {
socket = serSocket.accept();
socket.setSoTimeout(50000);
System.out.println("New connection accepte"+ socket.getInetAddress() + ":" + socket.getPort());
//exec "i/o"
exec.execute(new ServerHandler(socket));
} catch (Exception e) {
} finally {
if(socket!=null){
socket.close();
}
}
}
} public void bind(ServerSocket serSocket) throws IOException{
serSocket.bind(new InetSocketAddress(PORT));
System.out.println("服务器启动");
}
public static void main(String[] args) throws IOException {
new Server().server();
}
ServerHandler代码public class ServerHandler implements Runnable { private Socket socket; public ServerHandler(Socket socket) {
this.socket = socket;
} public PrintWriter getWriter(Socket socket) throws IOException {
OutputStreamWriter osr = new OutputStreamWriter(socket
.getOutputStream());
return new PrintWriter(osr, true);
} public BufferedReader getReader(Socket socket) throws IOException {
InputStreamReader is = new InputStreamReader(socket.getInputStream());
return new BufferedReader(is);
} public void handle() throws IOException {
BufferedReader reader = getReader(socket);
String msg = "";
int i = 0;
while ((msg = reader.readLine()) != null) {
System.out.println("the message come from client -->" + msg);
}
++i;
PrintWriter out = getWriter(socket);
out.write("Server accepted times -->" + i);
reader.close();
out.close();
} public void run() {
try {
handle();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (socket != null) {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}在线求助
现在client和server试图bind同一个ip和端口,这样应该是不行的
打断点了啊,就是在服务器exec.execute()的时候处理ServerHandler 然后读数据的时候就提示 client close没找出原因
http://blog.csdn.net/hzhxxx/archive/2009/12/09/4970196.aspx下列描述了JNSP(java network service platform)服务的部署和功能,如有不明白之处,自己查看源代码,我无力和没有太多时间回答太多的问题.
源代码一起提供,可以随意修改,发布,并商业化,但请保留作者的信息.为了技术的进步,请注意共享成就.目前已经发布于:http://download.csdn.net/source/1885332;http://hzhxxx.download.csdn.net/
如果查看后有技术问题探讨和建议的,欢迎致电致信联系.系统架构设计和实现有如下特点:
A. 采用 Accept-Connect 通讯模型,能统一管理系统中使用的所有 Socket 资源;
B. 系统支持通信和协议分离的实现原则,支持自定义协议解析模块;通信负责数据收发,协议负责数据鉴别,两者配合实现通信和协议的和谐工作;
C. 灵活支持业务处理功能重定义,分级支持慢业务和快业务的不同业务处理线程;
D. 丰富灵活的配置参数,能满足高扩展性;
E. 配合业务处理和通信模型,能异步的管理所有的交互步骤;
F. 分布式服务设计和部署,实现动态(热拔插)的增加和较少业务服务器,减少乃至拒绝单点服务;
System.out.println("close");
}
}
我换了一种写法
最基本的clientint c;
Socket s = new Socket("localhost", 5555);
InputStream in = s.getInputStream();
OutputStream out = s.getOutputStream();
String str = "aaa\n";
byte buf[] = str.getBytes();
out.write(buf);
// PrintWriter out = new PrintWriter(s.getOutputStream());
// out.write("aaa");
while ((c = in.read()) != -1) {
System.out.print((char) c);
}
s.close();
问题还是client close 错误啊具体要怎样写
ClientSocket 发送
ServerSocket 接受。
ClientSocket 关闭.
ServerSocket 关闭。
while (true) {
try {
socket = serSocket.accept();
socket.setSoTimeout(50000);
System.out.println("New connection accepte"+ socket.getInetAddress() + ":" + socket.getPort());
//exec "i/o"
exec.execute(new ServerHandler(socket));
} catch (Exception e) {
} finally {
if(socket!=null){
socket.close();
}
}
}
加了一段finally 然后在里面把socket给关了,,,就出现了我频繁 开启client频繁 提示client close的原因现在知道这个是在Handler处理业务的地方来关闭socket 感谢大家的帮助