黑马程序员技术交流社区
标题:
编码问题
[打印本页]
作者:
满兴旺
时间:
2014-4-24 23:08
标题:
编码问题
本帖最后由 满兴旺 于 2014-4-24 23:10 编辑
/*
需求:上传图片。
*/
import java.io.*;
import java.net.*;
/*
客户端:
1,服务端点
2,读取一个文件
3,通过socket输出流将数据发给服务端
4,读取服务端反馈信息。
5,关闭
*/
class PicClient
{
public static void main(String[] args) throws Exception
{
//①
Socket s=new Socket("127.0.0.1",10007);
//②源:硬盘上的文件
FileInputStream fis=new FileInputStream("1.jpg");
//③目的:socket输出流
OutputStream out=s.getOutputStream();
byte[] buf=new byte[1024];
int len=0;
while((len=fis.read(buf))!=-1)
{
out.write(buf,0,len);
}
s.shutdownOutput();//------------------------------------------告诉服务端结束
InputStream in=s.getInputStream();
byte[] bufIn=new byte[1024];
int num=in.read(bufIn);
System.out.println(new String(buf,0,num));//读取一行
fis.close();
s.close();
}
}
class PicServer
{
public static void main(String[] args) throws Exception
{
ServerSocket ss=new ServerSocket(10007);
Socket s=ss.accept();
String ip=s.getInetAddress().getHostAddress();
System.out.println(ip+"连入成功");
//源:socket输入流
InputStream fis=s.getInputStream();
//目的:硬盘上的文件
FileOutputStream fos=new FileOutputStream("2.jpg");
byte[] bufIn=new byte[1024];
int len=0;
while((len=fis.read(bufIn))!=-1)
{
fos.write(bufIn,0,len);
}
//输出反馈
OutputStream out=s.getOutputStream();
out.write("上传成功".getBytes());
fos.close();
s.close();
ss.close();
}
}
在我这客户端显示是:
上传成功.JPG
(7.96 KB, 下载次数: 0)
下载附件
2014-4-24 23:09 上传
能帮我调一下吗???
作者:
jzxyhjl
时间:
2014-4-25 14:16
你的代码中client端最后
InputStream in=s.getInputStream();
byte[] bufIn=new byte[1024];
int num=in.read(bufIn); --> 这行返回值是-1
System.out.println(new String(buf,0,num)); -->num=-1,这里出错了
这几行代码完全没用,而且会导致出错。
下面是把你的代码改了一下
Server端:
package test;
/*
需求:上传图片。
*/
import java.io.*;
import java.net.*;
public class SocketServerTest {
public static void main(String[] args) throws Exception {
ServerSocket ss = new ServerSocket(10007);
System.out.println("打开监听");
Socket s = ss.accept();
String ip = s.getInetAddress().getHostAddress();
System.out.println(ip + "连入成功");
// 源:socket输入流
InputStream is = s.getInputStream();
// 目的:硬盘上的文件
FileOutputStream fos = new FileOutputStream("F:/zzd2.jpg");
try{
byte[] buf = new byte[1024];
int len = 0;
while ((len = is.read(buf)) != -1) {
fos.write(buf, 0, len);
}
System.out.println("上传成功");
}catch(Exception e){
System.out.println("上传失败");
}finally{
if(is!=null){
is.close();
}
if(fos!=null){
fos.close();
}
if(s!=null){
s.close();
}
if(ss!=null){
ss.close();
}
}
// 输出反馈
// OutputStream out = s.getOutputStream();
// out.write("上传成功".getBytes());
}
}
复制代码
Client端:那部分错误的代码被我注释掉了
package test;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class SocketClientTest {
/*
* 客户端: 1,服务端点 2,读取一个文件 3,通过socket输出流将数据发给服务端 4,读取服务端反馈信息。 5,关闭
*/
// class PicClient
// {
public static void main(String[] args) throws Exception {
// ①
Socket s = new Socket("127.0.0.1", 10007);
System.out.println("连入成功");
// ②源:硬盘上的文件
FileInputStream fis = new FileInputStream("F:/2014.jpg");
// ③目的:socket输出流
OutputStream out = s.getOutputStream();
byte[] buf = new byte[1024];
int len = 0;
try{
while ((len = fis.read(buf)) != -1) {
out.write(buf, 0, len);
}
s.shutdownOutput();// ------------------------------------------告诉服务端结束
// byte[] bufin = new byte[1024];
// int num = 0;
// InputStream in = s.getInputStream();
// num = in.read(bufin);
// System.out.println(num);
}catch(Exception e){
}finally{
if(fis!=null){
fis.close();
}
if(out!=null){
out.close();
}
if(s!=null){
s.close();
}
}
}
}
复制代码
作者:
微笑=.一瞬间
时间:
2014-4-25 20:59
客户端 的s.shutdownOutput();// ------------------------------------------告诉服务端结束
应该放到 try语句块的最后一句 你试试
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2