简单的Socket问题 本帖最后由 gcfight 于 2011-09-06 18:27:54 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.net.ServerSocket;import java.net.Socket;public class Server { public static void main(String args[]) throws Exception { ServerSocket server = new ServerSocket(1429); System.out.println("Server is ready...Open the Client"); Socket client = null; BufferedReader br = null; BufferedWriter bw = null; while (true) { client = server.accept();// 侦听并接收到 Server的连接 br = new BufferedReader(new InputStreamReader(client .getInputStream())); bw = new BufferedWriter(new OutputStreamWriter(client .getOutputStream())); String msg; msg = br.readLine(); if (msg.equals("quit")) break; System.out.println("you got message" + msg); br.readLine(); } }} import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.net.ServerSocket;import java.net.Socket;public class Server { public static void main(String args[]) throws Exception { ServerSocket server = new ServerSocket(1429); System.out.println("Server is ready...Open the Client"); Socket client = null; BufferedReader br = null; BufferedWriter bw = null; while (true) { client = server.accept();// 侦听并接收到 Server的连接 br = new BufferedReader(new InputStreamReader(client .getInputStream())); bw = new BufferedWriter(new OutputStreamWriter(client .getOutputStream())); String msg; msg = br.readLine(); if (msg.equals("quit")) break; System.out.println("you got message" + msg); br.readLine(); } }} http://www.cnblogs.com/frankliiu-java/articles/1902092.html可参考。 网络编程时未正确捕获java.net.SocketException,客户端先关闭就会报这个异常; 代码写的太不好了,你在br.close(),bw.close(),把IO流都关闭了,就不会出现这种错误。即使不关闭也要.flush()一下。 其实原因很简单,可能是楼主刚接触,一时疏忽了:你在Server端当接收到一个Client端的连接时,此时开始读取客户端的数据,但你读数据的时候是个死循环,可能你说我的while循环中有break语句啊,它可以跳出来……但是实际上它根本就跳不出来,因为的你的客户端只写了一次数据,写完了之后,客户端的程序就结束了,那客户端的Socket自然也就关闭了,也就是说本次连接客户端已经中断了,可是你的服务器却还在等着客户端的数据输入,还在readLine()呢,服务器端找不到客户端的Socket了,自然就抛了异常了当然,如果你第一次写过来的数据是"quit"的话,它就不会抛异常了,两边程序同时正常结束所以,把你的那个读取客户端数据的代码改一下,就好了:public class Server { public static void main(String args[]) throws Exception{ ServerSocket server = new ServerSocket(1429); System.out.println("Server is ready...Open the Client"); Socket client = server.accept();//侦听并接收到 Server的连接 BufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream())); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(client.getOutputStream())); String msg = br.readLine(); while(msg!=null){ if(msg.equals("quit")) break; System.out.println("you got message: " + msg); msg = br.readLine(); } }} import java.io.*;import java.net.*;class Client { public static void main(String args[]) throws Exception{ Socket server = new Socket("127.0.0.1",1429); System.out.println("Connected with Server.."); BufferedReader br = new BufferedReader(new InputStreamReader(server.getInputStream())); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(server.getOutputStream())); bw.write("hello server"); server.close(); }}Server改过了,但是client 出现 connection refused的异常 一数学最值问题 来看看有什么错误 怎樣才可以迫死一個java程序員? 关于JSP的一个很奇怪的问题 百分求购一个登陆模块--要求有MD5加密和验证码 一个JList从数据库付值的问题,请各位看官帮忙。谢谢(问题解决马上给分). 请问java虚拟机和java解释器是一会事吗? 谁有jcreator pro2.5版的下载地址! !!!500分求购visibroker for java 4(或以上版本)。 概念問題 判断一个文件夹是另一个文件夹的子文件夹,相隔多层如何判断 java 编程,如何在一个在一个窗体类得到自己的句柄
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;public class Server {
public static void main(String args[]) throws Exception {
ServerSocket server = new ServerSocket(1429);
System.out.println("Server is ready...Open the Client");
Socket client = null;
BufferedReader br = null;
BufferedWriter bw = null;
while (true) {
client = server.accept();// 侦听并接收到 Server的连接
br = new BufferedReader(new InputStreamReader(client
.getInputStream()));
bw = new BufferedWriter(new OutputStreamWriter(client
.getOutputStream()));
String msg; msg = br.readLine();
if (msg.equals("quit"))
break;
System.out.println("you got message" + msg);
br.readLine();
}
}}
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;public class Server {
public static void main(String args[]) throws Exception {
ServerSocket server = new ServerSocket(1429);
System.out.println("Server is ready...Open the Client");
Socket client = null;
BufferedReader br = null;
BufferedWriter bw = null;
while (true) {
client = server.accept();// 侦听并接收到 Server的连接
br = new BufferedReader(new InputStreamReader(client
.getInputStream()));
bw = new BufferedWriter(new OutputStreamWriter(client
.getOutputStream()));
String msg; msg = br.readLine();
if (msg.equals("quit"))
break;
System.out.println("you got message" + msg);
br.readLine();
}
}}
但是实际上它根本就跳不出来,因为的你的客户端只写了一次数据,写完了之后,客户端的程序就结束了,那客户端的Socket自然也就关闭了,也就是说本次连接客户端已经中断了,可是你的服务器却还在等着客户端的数据输入,还在readLine()呢,服务器端找不到客户端的Socket了,自然就抛了异常了
当然,如果你第一次写过来的数据是"quit"的话,它就不会抛异常了,两边程序同时正常结束所以,把你的那个读取客户端数据的代码改一下,就好了:
public class Server {
public static void main(String args[]) throws Exception{
ServerSocket server = new ServerSocket(1429);
System.out.println("Server is ready...Open the Client");
Socket client = server.accept();//侦听并接收到 Server的连接
BufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream()));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
String msg = br.readLine();
while(msg!=null){
if(msg.equals("quit")) break;
System.out.println("you got message: " + msg);
msg = br.readLine();
} }
}
import java.net.*;class Client {
public static void main(String args[]) throws Exception{
Socket server = new Socket("127.0.0.1",1429);
System.out.println("Connected with Server..");
BufferedReader br = new BufferedReader(new InputStreamReader(server.getInputStream()));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(server.getOutputStream()));
bw.write("hello server");
server.close();
}
}Server改过了,但是client 出现 connection refused的异常