黑马程序员 Net

 

---------------------- <a href="http://edu.csdn.net/heima" target="blank">android培训</a>、<a href="http://edu.csdn.net/heima" target="blank">java培训</a>、期待与您交流! ----------------------
IP地址与Port
127.0.0.1 本地回路 用于测试本地网络程序
端口号范围0~65535,0~1024用于知名网络服务。
UDP和TCP
TCP,UDP帧格式
协议类型 源IP 目标IP 源端口 目标端口 帧序号 帧数据
TCP需要确认,UDP不需要。

Socket
Socket是网络驱动层提供给应用程序的接口和一种机制
Socket是在应用程序中创建,通过绑定机制与驱动程序建立关系,
告诉自己的IP和Port。

Socket数据发送过程
1,应用程序产生Socket。
2,再调用bind()将Socket的信息通知给驱动程序.
3,应用程序将要发送的数据传送给Socket。
4,驱动程序从Socket取出数据并通过网卡发送出去。

Socket数据接收过程

java.net包中用于TCP,UDP通信的类。
DatagramSocket类用于UDP。
ServeSocket类用于TCP通信的服务器端,接受客户端连接。
Socket类用于TCP通信的服务器端和客户端。

若只有一个IP的计算机通信,不要使用IP地址,否则只能在一台计算机上使用而不能在其他计算机上使用。若存在多块网卡,多个IP时应该准确说明哪些IP间的通信。

UDP网络程序

DatagramSocket类
DatagramPacket类
InetAddress类
最简单的UDP程序
用UDP编写网络聊天程序

用DatagramSocket类创建收发UDP~Socket对象。
构造函数:
public DatagramSocket()
public DatagramSocket(int port)
public DatagramSocket(int port,InetAddress laddr)用于有多个IP。

close()
send(DatagramPacket p)
Receive(DatagramPacket p)

如果把DatagramSocket比作创建的港口码头,那么DatagramPacker就是发送和接收数据的集装箱。

构造函数:

public DatagramPacket(byte[] buf,int lenth)用于接收数据。
public DatagramPacket(byte[] buf,int lenth,InetAddress ad, int port)用于发送数据。

getInetAddress()和getPort()。
getData()返回缓冲区的大小。
getLenth()返回实际的长度。

InetAddress类

是用于表示计算机IP地址的一个类。

getByName()静态方法,返回一个InetAddress的实例对象。
getHostAddress()返回包装的用点分隔的IP地址,比如192.0.0.1。

编程实例:

编写最简单的UDP发送和接受程序。

字符串与字节数组间相互转换。
UDP接受程序必先启动运行,才能接收数据。
用start命令来打开新命令行窗口的好处。
解决发送中文字符串的问题。

package it.heima.net;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.UnknownHostException;

public class UdpSend {

 /**
  * @param args
  * @throws IOException
  * @throws UnknownHostException
  */
 public static void main(String[] args) throws UnknownHostException, IOException {
  // TODO Auto-generated method stub
  DatagramSocket ds = new DatagramSocket();//端口号有系统自动分配
  String strInfo = "hello";
  ds.send(new DatagramPacket(strInfo.getBytes(), strInfo.length(),
    InetAddress.getByName("192.168.0.102"), 3000));
  ds.close();
 }

}

package it.heima.net;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class UdpReceive {

 /**
  * @param args
  * @throws IOException
  */
 public static void main(String[] args) throws IOException {
  // TODO Auto-generated method stub
  DatagramSocket ds = new DatagramSocket(3000);
  byte[] buf = new byte[1024];
  DatagramPacket dp = new DatagramPacket(buf,1024);
  ds.receive(dp);
  dp.getData();
  System.out.println(new String(dp.getData(),0,dp.getLength()) + "from" +
  dp.getAddress().getHostAddress() + ":" + dp.getPort());
  ds.close();
 }

}

 ---------------------- <a href="http://edu.csdn.net/heima" target="blank">android培训</a>、<a href="http://edu.csdn.net/heima" target="blank">java培训</a>、期待与您交流! ----------------------

详细请查看:<a href="http://edu.csdn.net/heima" target="blank">http://edu.csdn.net/heima</a>


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值