A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 不破大地 中级黑马   /  2013-6-1 21:57  /  1611 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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());

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

2 个回复

倒序浏览

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

如果用ServerSocket输出数据,就有到底要把数据传给哪个客户端的疑问,如果这样设计,服务器也会疯。哈哈。。

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
一个服务器可以有多个客户端来访问。服务器是没有自己的输入输入流的,一旦有客户端访问服务器,服务器就会利用accept()方法获得客户端的socket对象,然后利用客户端socket对象的输入输出流和客户端进行交互,这样就能保证数据不会发错了。
例如:
InputStream in=s.getInputStream();
......
OutputStream out=s.getOutputStream();
out.write("上传成功".getBytes());
你看,上面这几句中的s,就是ServerSocket对象利用Accept()方法获取连接过来的客户端Socket,然后这个服务器都是利用这个s进行读取和输出的。

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马