【求助 几十行的socket编程作业】

qq_18698003 2015-05-08 09:21:32
服务器端:
package 计算机网络_socket通信_题2;

public class Server2 {

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

ServerSocket server2=null;
server2=new ServerSocket(2010);
Socket socket=null;
socket=server2.accept();

PrintWriter os=new PrintWriter(socket.getOutputStream());
BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream()));

//下面这段传输文件列表 用了File类的list()函数

File f=new File("C:\\Users\\Administrator\\Desktop\\杂物\\joytokey file");
String a="下面是文件列表\n";
os.println(a);
os.flush();
String [] s=f.list();
int j=1;
for(String i:s)
{
os.println(""+j+"."+i);
os.flush();
j++;
}

os.println("请输入需要传输的文件的序号:");
os.flush();

//下面这段负责接受客户端发来的序号

int x=0;
String y;
while((y=in.readLine())!=null)
{
x=Integer.parseInt(y);
}
System.out.println(x);


os.close();
socket.close();
server2.close();
}
}


客户端:

package 计算机网络_socket通信_题2;

public class Client2 {

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

Socket client2=new Socket("127.0.0.1",2010);
PrintWriter os=new PrintWriter(client2.getOutputStream());
BufferedReader is=new BufferedReader(new InputStreamReader(client2.getInputStream()));
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));

//输出从服务器端发来的文件列表
String b;
while((b=is.readLine())!=null){
System.out.println(b);
}

//接收从键盘的输入(文件序号),发送给服务器端
String a=in.readLine();
os.println(a);
os.flush();

is.close();
client2.close();
}
}
...全文
257 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
放不完的风筝 2015-05-20
  • 打赏
  • 举报
回复
楼上说的对的,你可以在服务端加个结束标记。
s200910 2015-05-08
  • 打赏
  • 举报
回复
在服务器端没有定义处理来自客户端数据的对象: 应该加上: BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream())); 服务器端你只定义了标准输入的。。 //下面这段负责接受客户端发来的序号 int x=0; String y; while((y=is.readLine())!=null) { x=Integer.parseInt(y); }
jackcoding 2015-05-08
  • 打赏
  • 举报
回复
你可以在服务端的程序里打印一下接收到的客户端ip,看看客户端是否连接到了服务端。
qq_18698003 2015-05-08
  • 打赏
  • 举报
回复
这是题目要求
qq_18698003 2015-05-08
  • 打赏
  • 举报
回复
qq_18698003 2015-05-08
  • 打赏
  • 举报
回复
问题是在客户端控制台输入的文件序号 服务器端并没有收到 感觉是服务器端接收从客户端发来的序号这段有问题 一直在等待客户端的输入
runhua 2015-05-08
  • 打赏
  • 举报
回复
问题出在客户端代码的这一段:

//输出从服务器端发来的文件列表
String  b;
while((b=is.readLine())!=null){
System.out.println(b);
}
最后客户端是停在is.readLine了,因为连接未断的时候is.readLine是不会返回null的。 正确的做法是要设计一套传输协议,客户端根据协议知道什么时候服务端的数据传输完毕了。然后客户端再处理。
a1504047920 2015-05-08
  • 打赏
  • 举报
回复
qq_18698003 2015-05-08
  • 打赏
  • 举报
回复
qq_18698003 2015-05-08
  • 打赏
  • 举报
回复
引用 5 楼 s200910 的回复:
在服务器端没有定义处理来自客户端数据的对象: 应该加上: BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream())); 服务器端你只定义了标准输入的。。 //下面这段负责接受客户端发来的序号 int x=0; String y; while((y=is.readLine())!=null) { x=Integer.parseInt(y); }
我有着一段啊。。。
qq_18698003 2015-05-08
  • 打赏
  • 举报
回复
引用 4 楼 u012017135 的回复:
你可以在服务端的程序里打印一下接收到的客户端ip,看看客户端是否连接到了服务端。


连接没问题 这是客户端控制台的输出

62,612

社区成员

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

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