黑马程序员技术交流社区

标题: tcp上传的小疑惑 [打印本页]

作者: 不破大地    时间: 2013-6-1 21:57
标题: tcp上传的小疑惑
public static void main(String[] args) throws Exception
      {
              ServerSocket ss=new ServerSocket(10009);
              Socket s=ss.accept();
              
              InputStream in=s.getInputStream();
              FileOutputStream fos=new FileOutputStream("server.bmp");
              
              byte[] buf=new byte[1024];
              int len=0;
              while((len=in.read(buf))!=-1)
              {
                      fos.write(buf,0,len);
              }
              OutputStream out=s.getOutputStream();
              out.write("上传成功".getBytes());
              
              fos.close();
              ss.close();
              s.close();
      }

在该服务端中,输出的应该是ServerSocket  ss啊,为啥是s输出,还请各位师兄师姐指点。。
            OutputStream out=s.getOutputStream();
              out.write("上传成功".getBytes());

作者: 石贤芝    时间: 2013-6-1 23:59

服务器端可以接受多个客户端发过来的数据,对于每个连通的客户端它都会创建一个Socket对象,然后再通过这个Socket对象接受发送数据。
即Socket s=ss.accept();  然后这个Socket对象就会向与它对应的客户端接受或发送数据。

如果用ServerSocket输出数据,就有到底要把数据传给哪个客户端的疑问,如果这样设计,服务器也会疯。哈哈。。
作者: wangpan    时间: 2013-6-2 00:23
一个服务器可以有多个客户端来访问。服务器是没有自己的输入输入流的,一旦有客户端访问服务器,服务器就会利用accept()方法获得客户端的socket对象,然后利用客户端socket对象的输入输出流和客户端进行交互,这样就能保证数据不会发错了。
例如:
InputStream in=s.getInputStream();
......
OutputStream out=s.getOutputStream();
out.write("上传成功".getBytes());
你看,上面这几句中的s,就是ServerSocket对象利用Accept()方法获取连接过来的客户端Socket,然后这个服务器都是利用这个s进行读取和输出的。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2