网络编程总结以及TCP与UDP

网络编程
----------------------------------------------------------------------------
*网络模型
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("通过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();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值