Java c/s 服务端如何给客户端返回信息

熊猫大侠 2013-05-04 04:40:27

//服务器端
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;



public class TestServer {
public static void main(String[] args) throws IOException {
//1.建立服务端对象
ServerSocket ss=new ServerSocket(10001);
Socket s=ss.accept();//连接客户端
String ip=s.getInetAddress().getHostAddress();
System.out.println(ip+".....connected:");

//2.读取客户端发来的文件
InputStream in =s.getInputStream();


//3.存储读来的文件
File f=new File("C:\\");
if(!f.exists()){f.mkdirs();}
File file=new File(f,ip+".png");
FileOutputStream fos =new FileOutputStream(file);

byte[] b=new byte[1024];
int len=0;
while((len=in.read(b))!=-1){
fos.write(b,0,len);
}


//返回给客户端信息
//就是这部分有问题!
//报告的错误:Software caused connection abort: socket write error
OutputStream out=s.getOutputStream();
out.write("上传成功!".getBytes());

//关闭资源
fos.close();
s.close();
ss.close();
}

}


//客户端
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

public class TestClient{

public static void main(String[] args) throws UnknownHostException, IOException {


//1.建立客户端对象
Socket s=new Socket("192.168.1.11",10001);

//2.读取客户端要读取的图片
FileInputStream fis=new FileInputStream("C:\\0.png");

//3.将获取的socket流发送给服务端
OutputStream os=s.getOutputStream();
byte[] buf=new byte[1024];
int len=0;
while((len=fis.read(buf))!=-1){
os.write(buf,0,len);

}
s.shutdownOutput();

//返回文字,告诉客户端发送成功!
//这部分有问题
InputStream in=s.getInputStream();
byte[] bufIn=new byte[1024];
int lens=in.read(bufIn);
String text=new String(bufIn,0,lens+1);
System.out.println(text);


fis.close();
s.close();

}

}



跪求大神帮我看看,不胜感激!
...全文
388 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
a1216164960 2013-05-06
  • 打赏
  • 举报
回复
引用 3 楼 xiangwang545350163 的回复:
[quote=引用 2 楼 a1216164960 的回复:] 想问一下楼主是不是说有问题的地方 应该是程序没有执行吧~~
是的,我也很纳闷。。。。[/quote]楼主 在通过socket读取传过来的数据时是不会读到-1的,也就是服务端的这个while((len=in.read(b))!=-1) 循环是不会跳出来的 ,楼主可以试着先传送文件的大小,然后根据传送文件的大小,来判断是否读取完,而不是通过是否读到-1来判断。
熊猫大侠 2013-05-05
  • 打赏
  • 举报
回复
引用 2 楼 a1216164960 的回复:
想问一下楼主是不是说有问题的地方 应该是程序没有执行吧~~
是的,我也很纳闷。。。。
a1216164960 2013-05-04
  • 打赏
  • 举报
回复
想问一下楼主是不是说有问题的地方 应该是程序没有执行吧~~
熊猫大侠 2013-05-04
  • 打赏
  • 举报
回复
这是传智播客上面的一段视频,我模仿了怎么都有问题,图片上传成功了,主要是服务器端返回给客户端信息时有问题。我把
//返回文字,告诉客户端发送成功!
		InputStream in=s.getInputStream();
		byte[] bufIn=new byte[1024];
		int lens=in.read(bufIn);				
		String text=new String(bufIn,0,lens+1);
		System.out.println(text);

	   //返回给客户端信息
		OutputStream out=s.getOutputStream();
		out.write("上传成功!".getBytes());
注释掉,程序没有问题。 顺便,大神们诺是看不惯程序,也可以直接写个简单的服务器与客户端交互的小程序给我膜拜一下!拜托了!

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧