Server:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;public class DataSyncServer{ private ServerSocket serverSocket; public DataSyncServer() throws IOException {
serverSocket = new ServerSocket(8088);
} public void start() throws IOException {
while(true){
Socket socket=serverSocket.accept();
Thread handler=new Handler(socket);
handler.start();
}
}}
class Handler extends Thread{
private Socket socket;
Handler(Socket socket){
this.socket=socket;
}
public void run(){
try {
BufferedReader br=
new BufferedReader(new InputStreamReader(socket.getInputStream()));
StringBuffer sb=new StringBuffer();
String line="";
while((line=br.readLine())!=null)
sb.append(line);
br.close();
System.out.println(sb.toString());
OutputStreamWriter osw=
new OutputStreamWriter(socket.getOutputStream());
osw.write("ok");
osw.flush();
osw.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}Client:
public void testSocketClient()
{
try {
BufferedReader br=new BufferedReader(new FileReader("demo.xml"));
StringBuffer sb=new StringBuffer();
String line=null;
while((line=br.readLine())!=null){
sb.append(line);
}
Socket socket=new Socket("192.168.10.121",8088);
OutputStreamWriter osw=
new OutputStreamWriter(socket.getOutputStream());
osw.write(sb.toString());
osw.flush();
osw.close();
BufferedReader sbr=
new BufferedReader(new InputStreamReader(socket.getInputStream()));
sb=null;
sb=new StringBuffer();
while((line=sbr.readLine())!=null){
sb.append(line);
}
socket.close();
System.out.println(sb.toString());
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}总是出现 socket is closed的异常
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;public class DataSyncServer{ private ServerSocket serverSocket; public DataSyncServer() throws IOException {
serverSocket = new ServerSocket(8088);
} public void start() throws IOException {
while(true){
Socket socket=serverSocket.accept();
Thread handler=new Handler(socket);
handler.start();
}
}}
class Handler extends Thread{
private Socket socket;
Handler(Socket socket){
this.socket=socket;
}
public void run(){
try {
BufferedReader br=
new BufferedReader(new InputStreamReader(socket.getInputStream()));
StringBuffer sb=new StringBuffer();
String line="";
while((line=br.readLine())!=null)
sb.append(line);
br.close();
System.out.println(sb.toString());
OutputStreamWriter osw=
new OutputStreamWriter(socket.getOutputStream());
osw.write("ok");
osw.flush();
osw.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}Client:
public void testSocketClient()
{
try {
BufferedReader br=new BufferedReader(new FileReader("demo.xml"));
StringBuffer sb=new StringBuffer();
String line=null;
while((line=br.readLine())!=null){
sb.append(line);
}
Socket socket=new Socket("192.168.10.121",8088);
OutputStreamWriter osw=
new OutputStreamWriter(socket.getOutputStream());
osw.write(sb.toString());
osw.flush();
osw.close();
BufferedReader sbr=
new BufferedReader(new InputStreamReader(socket.getInputStream()));
sb=null;
sb=new StringBuffer();
while((line=sbr.readLine())!=null){
sb.append(line);
}
socket.close();
System.out.println(sb.toString());
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}总是出现 socket is closed的异常
解决方案 »
- Thread.join()不起作用?
- java扫雷程序,胜利了怎么判定,就可以弹出胜利的窗口
- (java)求助Graphics2D or Graphics所绘矢量该怎么实现缩放?
- 如何得到某个类的实例的调用者类
- 大家来看看这个难死人的问题
- 正则表达式,是不是都一样
- JDBC for SQL Server2000不支持中文吗???
- 学习Java的好方法,回帖奖励,奖励前20名回帖者
- 超级弱者问题!Java里面根本就不能调用Windows API么?
- Comparison method violates its general contract!
- java线程问题
- java解析xml文件的问题?急,希望高手帮忙!!!
public void start() throws IOException {
while(true){
Socket socket=serverSocket.accept();
Thread handler=new Handler(socket);
handler.start();
}
socket.close();//关闭
}
public void run(){
try {
BufferedReader br=
new BufferedReader(new InputStreamReader(socket.getInputStream()));
StringBuffer sb=new StringBuffer();
String line="";
while((line=br.readLine())!=null)
sb.append(line);
br.close();
System.out.println(sb.toString());
OutputStreamWriter osw=
new OutputStreamWriter(socket.getOutputStream());
osw.write("ok");
osw.flush();
osw.close();
//socket.close(); //去掉
} catch (IOException e) {
e.printStackTrace();
}
}
new OutputStreamWriter(socket.getOutputStream());
osw.write(sb.toString());
osw.flush();
// osw.close(); 你输出了,怎么能字节关闭呢?
的声明放在方法的前面.
让BufferedReader对象放在socket对象后面
我把注释了,就诶过server就收不到消息了
下面是我改写的,实际运行通过(下面的代码中 import 部分省去了)。public class Server { private ServerSocket serverSocket; public Server() throws IOException {
serverSocket = new ServerSocket(8088);
} public void start() throws IOException {
while (true) {
Socket socket = serverSocket.accept();
Thread handler = new Handler(socket);
System.out.println("服务端接受到连接...");
handler.start();
}
} public static void main(String[] args) throws Exception {
new Server().start();
}
}class Handler extends Thread { private Socket socket; Handler(Socket socket) {
this.socket = socket;
} public void run() {
try {
readContent();
System.out.println("接收完毕。");
sendResponse();
System.out.println("发送回应。");
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
} /**
* 向客户端发送回应
*
* @throws IOException 如果发送失败
*/
private void sendResponse() throws IOException {
OutputStreamWriter osw = new OutputStreamWriter(socket.getOutputStream());
osw.write("ok");
osw.flush();
osw.close();
} /**
* 读取客户端传输过来的内容。内容以“__END__”结束。
*
* @throws IOException 如果读取失败
*/
private void readContent() throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line;
while (!(line = br.readLine()).equals("__END__")) {
System.out.println(line);
}
}}
///////////////////////////////////////////////public class Client { public static void main(String[] args) {
try {
String content = readFile();
Socket socket = new Socket("127.0.0.1", 8088);
sendContent(socket, content);
readResponse(socket);
socket.close();
} catch (Exception e) {
e.printStackTrace();
} } /**
* 通过 Socket 端口读取服务器端的回应
*
* @param socket 读取的端口
*
* @throws IOException 如果读取失败
*/
private static void readResponse(Socket socket) throws IOException {
BufferedReader reader = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
StringBuffer buffer = new StringBuffer();
String line;
while ((line = reader.readLine()) != null) {
buffer.append(line);
}
System.out.println(buffer.toString());
} /**
* 将指定的内容通过指定的端口发送出去
*
* @param socket 指定端口
* @param content 要发送的内容
*
* @throws IOException 如果发送失败
*/
private static void sendContent(Socket socket, String content) throws IOException {
OutputStreamWriter osw =
new OutputStreamWriter(socket.getOutputStream());
osw.write(content + "__END__\n");
osw.flush();
} /**
* 读取文件内容
*
* @return 文件内容
*
* @throws IOException 如果读取文件失败
*/
private static String readFile() throws IOException {
BufferedReader br = new BufferedReader(new FileReader("demo.xml"));
StringBuffer sb = new StringBuffer();
String line;
while ((line = br.readLine()) != null) {
sb.append(line).append("\n");
}
String content = sb.toString();
br.close();
return content;
}
}