黑马程序员技术交流社区

标题: 网络编程中TCP问题 [打印本页]

作者: 火七君    时间: 2015-3-13 15:33
标题: 网络编程中TCP问题
本帖最后由 火七君 于 2015-3-13 15:37 编辑
  1. /*
  2. 需求:客户端给服务端发送数据,服务端收到后,给客户端反馈信息。
  3. */  
  4. //客户端  
  5. import java.net.*;  
  6. import java.io.*;  
  7. class  TcpClient  
  8. {  
  9.     public static void main(String[] args) throws Exception  
  10.     {  
  11.         //1、创建客户端的Socket服务。指定目的主机和端口  
  12.         Socket s=new Socket("127.0.0.1",10000);  
  13.         //2、获取Socket流中输出流,发送数据  
  14.         OutputStream out=s.getOutputStream();  
  15.         out.write("你好!".getBytes());  
  16.         //3、获取Socket流中的输入流,用来接收服务端的反馈信息并打印  
  17.         InputStream in=s.getInputStream();  
  18.          
  19.         byte[] buf=new byte[1024];  
  20.         int len=in.read(buf);//读取反馈的数据  
  21.   
  22.         //输出接收的数据  
  23.         System.out.println(new String(buf,0,len));  
  24.   
  25.         s.close();//关闭资源  
  26.     }
复制代码

其中第14行中OutputStream out=s.getOutputStream();  从语法角度讲创建对象不应该是有new吗,很多地方都没有new我不理解,我相信有很多人也不理解,请各位大神指点!!!
作者: 艺多不压身丶    时间: 2015-3-13 15:48
因为TCP是面向连接的,三次握手,所以在创建Socket对象是就应该知道具体地址。
连接成功后就建立了通道,socket流产生了。只要获取socket流中的读取流和写入流即可,
        只要通过getInputStream和getOutputStream就可以获取两个流对象。。
作者: wdhm5423    时间: 2015-3-13 16:00
本帖最后由 wdhm5423 于 2015-3-13 16:02 编辑

OutputStream out=s.getOutputStream();这是在调用方法。
函数体是这样的:
public OutputStream  getOutputStream(){
      *********
      return OutputStream对象;
}
调用该方法会获得一个OutputStream对象,也就是Socket的输出流对象。

单例设计模式学过了吧,getInstance()方法返回一个单例对象,一样的道理。


作者: 火七君    时间: 2015-3-13 16:06
艺多不压身丶 发表于 2015-3-13 15:48
因为TCP是面向连接的,三次握手,所以在创建Socket对象是就应该知道具体地址。
连接成功后就建立了通道,so ...

恩,学习了
作者: 火七君    时间: 2015-3-13 16:08
wdhm5423 发表于 2015-3-13 16:00
OutputStream out=s.getOutputStream();这是在调用方法。
函数体是这样的:
public OutputStream  getOutpu ...

恩,写的好详细。谢谢了
作者: Etby    时间: 2015-3-13 18:00
getOutputStream();是直接返回这个Socket对象的输出流,这个流应该是对象本身自己已经建立好了 你只是拿到而已




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