黑马程序员_java之网络编程

------- android培训java培训、期待与您交流! ----------

网络编程:(Socket编程、套接字编程)

网络编程三要素:

1、IP地址

2、端口:应用程序的逻辑标识(范围:0~65535;有效范围:1024~65535)

3、协议

 

应用程序的规则:

UDP:

面向无连接

打包发送数据,大小有限制,64K

不可靠,速度快

TCP:

面向有连接

数据无限制

可靠,速度慢

Socket:

网络编程其实是Socket间的通信,数据在Socket的IO间进行传输。

 

UDP编程:

只要是网络传输,必须有socket 。
数据一定要封装到数据包中,数据包中包括目的地址、端口、数据等信息。

直接操作udp不可能,对于java语言应该将udp封装成对象,易于我们的使用,这个对象就是DatagramSocket. 封装了udp传输协议的socket对象。

因为数据包中包含的信息较多,为了操作这些信息方便,也一样会将其封装成对象。这个数据包对象就是:DatagramPacket.通过这个对象中的方法,就可以获取到数据包中的各种信息。

DatagramSocket具备发送和接受功能,在进行udp传输时,需要明确一个是发送端,一个是接收端。

 

UDP的发送端思路:

    代码体现:

   //创建发送端的Socket服务对象。DatagramSocket
   DatagramSocket ds = new DatagramSocket();

   //封装数据 byte[] bys = "".getBytes()

   byte[] bys = "hello,udp".getBytes();

   //打包数据 DatagramPacket
   DatagramPacket dp = new DatagramPacket(bys,bys.length,InetAddress.getByName("192.168.1.100"),11111);

   //发送数据

   ds.send(dp);

   //释放资源

   ds.close();

  UDP的接收端思路:

   代码体现:

   //创建接收端的Socket服务对象,指定端口。DatagramSocket
   DatagramSocket ds = new DatagramSocket(11111);

   //创建容器对象

   byte[] bys = new byte[1024];

   //创建数据包对象
   DatagramPacket dp = new DatagramPacket(bys,bys.length);

   //接收数据

   ds.receive(dp);

   //解析数据

   String ip = dp.getInetAddress().getHostAddress();
   String text = new String(dp.getData(),0,dp.getLength());

   //释放资源

   ds.close();

  案例:

   1:键盘录入数据,发送
   2:聊天程序
   3:多线程改进聊天程序

 

TCP编程:

两个端点的建立连接后会有一个传输数据的通道,这通道称为流,而且是建立在网络基础上的流,称之为socket流。该流中既有读取,也有写入。

tcp的两个端点:一个是客户端,一个是服务端。
客户端:对应的对象,Socket
服务端:对应的对象,ServerSocket

 

  TCP客户端发送思路:
   代码体现:

   //创建客户端的服务对象,指定目标和端口。Socket
   Socket s = new Socket(InetAddress.getByName("192.168.1.100"),10086);

   //创建数据

   OutputStream os = s.getOutputStream();

   //获取输出流对象
   os.write("hello,tcp".getBytes());

   //通过流对象输出数据
   os.flush();

   //释放资源

   s.close()

 

  TCP服务器端接收思路:

   代码体现: 

   //创建服务器端的服务对象,并制定端口。ServerSocket

   ServerSocket ss = new ServerSocket(10086);

   //通过accept方法获取当前连接的客户端对象

   Socket s = ss.accept();

   //通过客户端对象获取输入流

   InputStream is = s.getInputStream();

   //读取数据并输出
   byte[] bys = new byte[1024];
   int len = is.read(bys);
   String text = new String(bys,0,len);
   String ip = s.getInetAddress().getHostAddress();

   System.out.println(ip+"***"+text);

   //释放资源

   ss.close();

 

  案例:

   1:服务器给客户端一个反馈
   2:键盘录入数据,服务器大写反馈
      注意事项:字符流要刷新,readLine方法是以\r\n作为结束。
   3:上传文件
      注意事项:容易产生阻塞。

   4: 解决方案:
     自定义结束标记
     shutDownOutput(),shutDownInput()

 


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值