目的是客户端发送图片的名字 然后服务器发过去 为什么会有错呢
at com.socketClient.run(socketClient.java:83)
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:134)
at java.net.SocketInputStream.read(SocketInputStream.java:121)
at com.socketClient.run(socketClient.java:83)
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:134)
at java.net.SocketInputStream.read(SocketInputStream.java:121)
at com.socketClient.run(socketClient.java:83)
//客户端
package com;import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;public class socketClient extends Thread { InputStream in;
DataOutputStream out;
OutputStream out1;
String s;
Socket socket = null;
public socketClient(String host, int port) {
// 建立socket对象
try {
socket = new Socket(host, port);
} catch (UnknownHostException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
} // 建立输入输出流对象
try {
out = new DataOutputStream(socket.getOutputStream());
} catch (IOException e1) {
e1.printStackTrace();
}
// 开始后台线程用于监听服务器端传送的信息
start(); // 然后开始接收用户输入信息并传送到客户端 /* String words = ""; while (true) {
try {
words = in2.readLine();
} catch (IOException e) {
e.printStackTrace();
}
sendMessage(words); }
*/
} public void run() {
//先设置名字在发送 messsage
while (true) {
try {
in = socket.getInputStream();
} catch (IOException e1) {
e1.printStackTrace();
}
try {
out1=new FileOutputStream(new File("D:\\pic1\\"+s+".jpg"));
}catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
int b=0;
byte[]tom =new byte[1024];
while((b = in.read(tom,0,tom.length))>0){
out1.write(tom);
out1.flush();
}
// out1.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} private void sendMessage(String message) { this.s=message;
try {
out.writeUTF(message);
} catch (IOException e) {
e.printStackTrace();
} } // 程序开始执行
public static void main(String args[]) { int socketport = 13333;
String hostAddress = "114.214.101.24";// 其实可以通过参数指定IP和端口,这里简化这个过程
socketClient sc1= new socketClient(hostAddress, socketport);
sc1.sendMessage("0");
sc1.sendMessage("1"); }
}
// 服务器
package com;import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.sql.SQLException;public class Server{static Socket socketlist[] = new Socket[1000];public Server( int socketport ) throws IOException {
//listenForConnecting方法用于侦听连接
listenForConnecting( socketport );}private void listenForConnecting( int socketport ) throws IOException {ServerSocket serversocket = new ServerSocket(socketport);//关键是侦听的部分,用一个while循环来实现while (true) {Socket socket = serversocket.accept();//一旦客户端连接进来,就增加一个线程用于与该客户端的通信,关键在于传递参数,
//将Server类和客户端的sokcet都传送到这个通信线程 new ConnectionForClient(this,socket);}
}
//SendMessageCenter方法用于发送信息给客户端public void sendImage (String s,Socket socket) throws IOException{ //建立输出流,将信息发送给客户端
//你会发现一个用于储存客户端socket信息的数组socketlist[],该数组在客户
//端连接或断开连接时更新数据,这里不详细讨论这个问题
// try {
byte[] tom=new byte[1024];
int b=0;
FileInputStream in = new FileInputStream(new File("d:\\pic\\"+s+".jpg"));
OutputStream out = socket.getOutputStream();
System.out.println ("开始接收数据...");
while((b = in.read(tom,0,tom.length))>0)
{
out.write(tom);
out.flush();
}
// in.close();
// out.close();
// } catch (SQLException e) {
// e.printStackTrace();
//}
}}
package com;import java.io.DataInputStream;
import java.io.IOException;
import java.net.Socket;
public class ConnectionForClient extends Thread{Server server; Socket socket;//所有准备工作在构造器中完成public ConnectionForClient( Server server, Socket socket ) {this.server = server; this.socket = socket;start();}public void run() {//首先建立DataInputStream类用于接收客户端发送的信息DataInputStream dataIn = null;
try {
dataIn = new DataInputStream( socket.getInputStream() );
} catch (IOException e1) {
e1.printStackTrace();
}//类似于服务器的侦听连接工作,同样侦听客户端发送的信息while (true) {try {
String s = dataIn.readUTF();
if(!s.equals("")){
server.sendImage( s , this.socket );
}
} catch (IOException e) {
e.printStackTrace();
}
//一旦接收到客户端发送的信息,
}
} public static void main(String args[]) throws Exception {//程序开始执行 int socketport = 13333; new Server(socketport);}}
at com.socketClient.run(socketClient.java:83)
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:134)
at java.net.SocketInputStream.read(SocketInputStream.java:121)
at com.socketClient.run(socketClient.java:83)
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:134)
at java.net.SocketInputStream.read(SocketInputStream.java:121)
at com.socketClient.run(socketClient.java:83)
//客户端
package com;import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;public class socketClient extends Thread { InputStream in;
DataOutputStream out;
OutputStream out1;
String s;
Socket socket = null;
public socketClient(String host, int port) {
// 建立socket对象
try {
socket = new Socket(host, port);
} catch (UnknownHostException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
} // 建立输入输出流对象
try {
out = new DataOutputStream(socket.getOutputStream());
} catch (IOException e1) {
e1.printStackTrace();
}
// 开始后台线程用于监听服务器端传送的信息
start(); // 然后开始接收用户输入信息并传送到客户端 /* String words = ""; while (true) {
try {
words = in2.readLine();
} catch (IOException e) {
e.printStackTrace();
}
sendMessage(words); }
*/
} public void run() {
//先设置名字在发送 messsage
while (true) {
try {
in = socket.getInputStream();
} catch (IOException e1) {
e1.printStackTrace();
}
try {
out1=new FileOutputStream(new File("D:\\pic1\\"+s+".jpg"));
}catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
int b=0;
byte[]tom =new byte[1024];
while((b = in.read(tom,0,tom.length))>0){
out1.write(tom);
out1.flush();
}
// out1.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} private void sendMessage(String message) { this.s=message;
try {
out.writeUTF(message);
} catch (IOException e) {
e.printStackTrace();
} } // 程序开始执行
public static void main(String args[]) { int socketport = 13333;
String hostAddress = "114.214.101.24";// 其实可以通过参数指定IP和端口,这里简化这个过程
socketClient sc1= new socketClient(hostAddress, socketport);
sc1.sendMessage("0");
sc1.sendMessage("1"); }
}
// 服务器
package com;import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.sql.SQLException;public class Server{static Socket socketlist[] = new Socket[1000];public Server( int socketport ) throws IOException {
//listenForConnecting方法用于侦听连接
listenForConnecting( socketport );}private void listenForConnecting( int socketport ) throws IOException {ServerSocket serversocket = new ServerSocket(socketport);//关键是侦听的部分,用一个while循环来实现while (true) {Socket socket = serversocket.accept();//一旦客户端连接进来,就增加一个线程用于与该客户端的通信,关键在于传递参数,
//将Server类和客户端的sokcet都传送到这个通信线程 new ConnectionForClient(this,socket);}
}
//SendMessageCenter方法用于发送信息给客户端public void sendImage (String s,Socket socket) throws IOException{ //建立输出流,将信息发送给客户端
//你会发现一个用于储存客户端socket信息的数组socketlist[],该数组在客户
//端连接或断开连接时更新数据,这里不详细讨论这个问题
// try {
byte[] tom=new byte[1024];
int b=0;
FileInputStream in = new FileInputStream(new File("d:\\pic\\"+s+".jpg"));
OutputStream out = socket.getOutputStream();
System.out.println ("开始接收数据...");
while((b = in.read(tom,0,tom.length))>0)
{
out.write(tom);
out.flush();
}
// in.close();
// out.close();
// } catch (SQLException e) {
// e.printStackTrace();
//}
}}
package com;import java.io.DataInputStream;
import java.io.IOException;
import java.net.Socket;
public class ConnectionForClient extends Thread{Server server; Socket socket;//所有准备工作在构造器中完成public ConnectionForClient( Server server, Socket socket ) {this.server = server; this.socket = socket;start();}public void run() {//首先建立DataInputStream类用于接收客户端发送的信息DataInputStream dataIn = null;
try {
dataIn = new DataInputStream( socket.getInputStream() );
} catch (IOException e1) {
e1.printStackTrace();
}//类似于服务器的侦听连接工作,同样侦听客户端发送的信息while (true) {try {
String s = dataIn.readUTF();
if(!s.equals("")){
server.sendImage( s , this.socket );
}
} catch (IOException e) {
e.printStackTrace();
}
//一旦接收到客户端发送的信息,
}
} public static void main(String args[]) throws Exception {//程序开始执行 int socketport = 13333; new Server(socketport);}}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货