今天尝试用socket编写一个文件传输的小程序,运行后一直报以下错误:
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:113)
at java.net.SocketInputStream.read(SocketInputStream.java:90)
at com.socket.Server.begin(Server.java:41)
at com.socket.Server.run(Server.java:24)
下面是我编写socket Server的代码: package com.socket;import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;public class Server extends Thread {
public static final int PORT = 9876;
ServerSocket s = null; Server() throws IOException {
s = new ServerSocket(PORT);
} @Override
public void run() {
try { while (true) {
Socket socket = s.accept();
begin(socket);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} public void begin(Socket socket) {
int flag = 0;
byte b[] = new byte[1024];
while (true) {
InputStream in;
BufferedOutputStream bos;
try {
in = socket.getInputStream();
bos = new BufferedOutputStream(new FileOutputStream("d:/a.txt"));
while ((flag = in.read(b)) > 0) {
bos.write(b, 0, flag);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } } public static void main(String[] args) throws IOException {
Server s = new Server();
s.start();
}
}求指教!谢谢了!
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:113)
at java.net.SocketInputStream.read(SocketInputStream.java:90)
at com.socket.Server.begin(Server.java:41)
at com.socket.Server.run(Server.java:24)
下面是我编写socket Server的代码: package com.socket;import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;public class Server extends Thread {
public static final int PORT = 9876;
ServerSocket s = null; Server() throws IOException {
s = new ServerSocket(PORT);
} @Override
public void run() {
try { while (true) {
Socket socket = s.accept();
begin(socket);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} public void begin(Socket socket) {
int flag = 0;
byte b[] = new byte[1024];
while (true) {
InputStream in;
BufferedOutputStream bos;
try {
in = socket.getInputStream();
bos = new BufferedOutputStream(new FileOutputStream("d:/a.txt"));
while ((flag = in.read(b)) > 0) {
bos.write(b, 0, flag);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } } public static void main(String[] args) throws IOException {
Server s = new Server();
s.start();
}
}求指教!谢谢了!
解决方案 »
- java下改变字体无效????求高人解决
- 一个简单的正则表达式
- 请问一下,如何实现让java执行某个class下面指定的方法?
- 缓冲区的疑问
- 送分:请给我一个下载地址,是结合Java、数据结构、算法三者的电子书就OK!或者讲书发送到我的邮箱...多谢...
- Java中数据类型转换的问题.很急在线等待!!!!!!!!!!!!!!!!!
- 如何使一个file表示当前的目录?
- sql server 2000和jdbc for sql server 2002都安装好了,但还是出错。
- 100分求:如何打印图片?
- JAVA和vc哪个更好学?
- 跪求各路帅哥用迭代写一个sortedlist ADT代码
- JavaSoundDemo
at java.net.SocketInputStream.read(SocketInputStream.java:113)
at java.net.SocketInputStream.read(SocketInputStream.java:90)
at com.socket.Server.begin(Server.java:41)对方关闭了连接,所以读取失败了。检查你Client端的代码吧。
1、没有启用线程去处理 begin() 会阻塞主线程,这样导致只能服务一个Client;
2、being()中是死循环,没有退出条件,按理来说当流度取不到数据时,意味着对方已经关闭OutputStream:此时应终止退出循环,关闭Socket。第二个问题也许是引发异常的原因。
// while (true) { // 不需要这个东西
InputStream in;
BufferedOutputStream bos;
try {
in = socket.getInputStream();
bos = new BufferedOutputStream(new FileOutputStream("d:/a.txt"));
while ((flag = in.read(b)) > 0) {
bos.write(b, 0, flag);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
socket.close();
}
// } // 一起取消