您的位置:首页 > 理论基础 > 计算机网络

网络编程总结以及TCP与UDP

2013-09-15 11:00 330 查看
网络编程

----------------------------------------------------------------------------

*网络模型

OSI参考模型

TCP/IP

*网络通讯要素

ip地址

端口号

传输协议

网络传输的应用

1,找到对方IP

2,数据要发送到对方指定的应用程序上。为了标识这些应用程序,所以给这些网络应用程序都用数字进

行标识。

为了方便称呼这些数字标识就叫做"端口",我们计算机上所说的端口并非是网线上的那种物理端口,我

们的端口属于逻辑端口。也就是说我们用MSN发送信息之所以不会发送到QQ上就是因为两者的数字标示不

同。

3,定义通讯规则,这个规则称为"协议"。

国际组织定义了一个通用协议:TCP/IP。不论进入哪个国家的服务器游戏,都可以进行交互,就是因为

都拥有共通的TCP/IP ,UDP

=======================================================================================

----TCP/IP和UDP的区别

UDP

*将数据及源和目的封装成数据包中,不需要建立连接

*每个数据包的大小限制在64K内

*因无连接,是不可靠协议

*不需要建立连接,速度快

TCP

*建立连接,形成传输数据的通道。

*在建立连接中进行大数据量传输

*通过三次握手完成连接,是可靠协议

(三次握手就是例如:张三在吗?是的我在;好我知道你在了。三次握手来验证)

*必须建立连接,效率会稍低

小结:UDP发送时会封包,包大小会有限制,面向无连接。速度快可靠性低

=======================================================================================

 

 IP限定最高位255

 端口最高为0-65535不过一般系统端口在1024中,WEB服务80,TOCAT8080,

-----------------------------------------------------------------

Ip地址

*网络中设备的标识

*不易记忆,可用主机名

*本地回环地址:127.0.0.1,主机名:localhost

点口号

*用于标识进程的逻辑地址,不同进程的标识

*有效端口:0-65535,其中0-1024系统使用或保留端口。

传输协议

*通讯的规则

*常见协议:TCP,UDP

得到IP地址以及本机名:

密码

InetAddress inter = InetAddress.getLocalHost();//得到本机信息

  System.out.println("本地IP:"+inter.getHostAddress());

  System.out.println("本地名称:"+inter.getHostName());

  

  InetAddress other = InetAddress.getByName("www.baidu.com");//通过IP得到任何

一台机器的信息

  /*如果IP地址和对应的主机名映射关系没有在网络上的话,主机地址可以找到,但是

没有解析成功。

   * 所以得到的本机名还是IP地址

   *

   * */

  System.out.println("本地IP:"+other.getHostAddress());

  System.out.println("本地名称:"+other.getHostName());

=========================================================================================

Socket(插座)

*Socket就是为网络服务提供的一种机制。

我们可以理解为码头,两个码头若要传输货物,必须先要有码头才能接受和发送。

注意:凡是带有地址的端口都是构造发送数据包的。

---------------------------------------------------------------------------------------

需求:通过UDP传输方式,将一段文字数据发送出去

思路:

1,建立Updsocket服务。

2,提供数据,并将数据封装到数据包中(寻找端口发送什么样的内容)

3,通过Socket服务的发送功能,将数据包发出去。

4,关闭资源。

//1,建立Updsocket服务。

  DatagramSocket ds = new DatagramSocket();

  //2,确定数据,并将数据封装到数据包中(寻找端口发送什么样的内容),

  //DatagramPacket(byte[] buy,int length,InetAddress,int pot);1,资料,2发送长

度多少,3IP位置,4端口号

  byte[] buf = "upd here i come".getBytes();

  DatagramPacket dp = new DatagramPacket

(buf,buf.length,InetAddress.getByName("127.0.0.1"),8080);

  //3,通过Socket服务的发送功能,将数据包发出去。

     ds.send(dp);

  //4,关闭资源。

  ds.close();

但是端口号发过来了,但是怎么能被数据收到呢??

需求:

1,定义UDPsocket服务。

2,定义一个数据包,因为要存储接受到的字节数据。因为数据包对象中有更多功能可以提取字节数据中

的不同数据信息。

3,通过Socket服务的receive方法接收到的数据存储已定义好的数据包中。

4,通过数据包对象的特有功能,将这些不同的数据取出,打印在控制台上。

5,关闭资源。

实现代码:

//1 创建udpsocket,创建接受端口

  DatagramSocket ds = new DatagramSocket(10000);

  //2 定义数据包,用于存储数据

  byte[] buf = new byte[1024];

  DatagramPacket dp = new DatagramPacket(buf,buf.length);

  //3 用receive方法将数据存到数据包中

  ds.receive(dp);

  //4 通过数据包的方法解析包中的数据

  String ip = dp.getAddress().getHostAddress();

  String date = new String(dp.getData(),0,dp.getLength());

  int port = ds.getPort();

  System.out.println("ip:"+ip+"----内容:"+date+"-----port:"+port);

  //5 关闭数据

  ds.close();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: