网络编程


协议:通信规则。只有具有了相同规则,才能通信。

         TCP/IP 协议,国际通用协议,可以用于广域网,也可用于局域网。

          如果局域网,不想用如此高的规则,则可安装新规则。比如几个人设置了局域网玩游戏,设置了特有规则,别人就进不来。

网络参考模型:

            OSI: 七层:应用层,表示层,会话层,传输层,网络层,数据链路层.物理层
                    每个层都有自己的协议,每层给数据加入(接受是减去)自己特有的数据。
                      前四层在给应用层数据封装,TCP协议在传输层。
                     网络层给数据IP地址,即告诉数据往哪去,IP地址协议就在网络层,
                     数据链路层:底层标准
                     物理层:看得见,摸得着的,如 网线就是标准的物理层

             TCP/IP参考模型:四层,每个曾都有自己的协议   应用层,传输层,网际层,主机至网络层
                     我们现在玩的编程是在传输层和网际层,以后学的Javaweb开发玩到了应用层。
                     传输层:TCP、UDP
                     网际层:最常见的是IP协议
                     应用层:HTTP协议

网络通信要素 

IP地址InetAddress 
网络中设备的标识 
不易记忆,可用主机名 
本地回环地址:127.0.0.1 主机名:localhost 

端口号: 
用于标识进程的逻辑地址,不同进程的标识。 
有效端口:0~65535,其中0~1024系统使用或保留端口。 
常见默认端口 
web服务端口:80 
tomcat服务器端口:8080 
mysql数据库端口:3306 

传输协议 
通讯的规则 
常见协议:TCP、UDP 

Socket  
Socket就是为网络服务提供的一种机制 
通信两端都有Socket 
网络通信其实就是Socket间的通信 
数据在两个Socket间通过IO传输 




网络通信概述  
网络通信基本流程 
1.找到对方IP 
2.找到指定端口。 
  数据要发送到对方指定的应用程序上。为了标识这些应用程序,所以给这些网络应用程序都用数字进行标识   。为了方便称呼这些数字,就叫做端口。逻辑端口。 
3.定义通讯规则。这个通讯规则成为协议。 
  国际组织定义了通用协议TCP/IP。 



TCP和UDP  
UDP 
不需要建立连接,将数据及源和目的封装成数据包中。 
每个数据包的大小限制在64k以内 
因为无连接,是不可靠协议 
不需要建立连接,速度快 

常见UDP协议应用 
视频会议、聊天、共享桌面。 

TCP 
三次握手建立连接,形成传输数据的通道 
在连接中进行大数据量传输 
通过三次握手完成连接,是可靠协议 
必须建立连接,效率低。 
telent、FTP、多线程下载等 

TCP传输  
TCP传输分为客户端和服务器 
Socket和ServerSocket 

Socket客户端 
1.建立Socket客户端服务,指定连接主机和端口。 
2.获取Socket网络输入输出流进行读写操作,如果是多次读写用while循环,写数据可以用PrintWriter。 
  因为PrintWriter构造函数即可以接受字节流又可以接受字符流而且可以接受boolean值指定自动刷新所以比  BufferedWrter在写文本数据时更方便代码更简洁。 
3.关闭客户端资源。 

ServerSocket服务端 
1.建立ServerSocket服务,监听一个端口。 
2.获取与服务端连接的Socket客户端对象。 
3.获取与服务端连接的Socket客户端网络输入输出流。 
4.进行读写操作,如果是多次读写用while循环,写数据可以用PrintWriter。 
  因为PrintWriter构造函数即可以接受字节流又可以接受字符流而且可以接受boolean值指定自动刷新所以比   BufferedWrter在写文本数据时更方便代码更简洁。 

5.关闭Socket客户端,关闭服务端(可选)。


UDP传输 
UDP发送 
1.创建UDP服务,通过DatagramSocket对象。 
2.确定数据,并封装成数据包。DatagramPacket(byte[] buf,int length,InetAddress address,in port) 
3.通过socket服务send方法将数据包发出去。 
4.关闭udp资源。 


UDP接收 
1.定义udpsocket服务,监听端口。 
  其实就 给这个接受网络应用程序定义数字标识。 
  方便与明确哪些数据过来,该应用程序可以处理。 
2.定义一个数据包,接受数据。 
  因为要存储接受到的字节数据。 
  数据包对象中有更多功能可以提取字节数据中的不同数据信息。 
3.通过udpsocket服务的receive方法将接受到的数据存入已定义好的数据包中。 
  可以通过while(true)方法一直监听端口。 
  注意:udpsocket对象要在while循环外创建否则会出现BindException绑定异常。 
4.通过数据包对象的特有功能,将这些不同的数据取出,对数据进行处理。 
5.关闭资源。 


服务器处理客户端的并发连接 


前面的服务端程序有个局限性,当A客户端连上以后,被服务端获取到,服务端执行具体流程。 
这时B客户端连接,只有等待。 
因为服务端还没有处理完A客户的请求,还没有循环回来执行下次accept方法,所以 暂时获取不到B客户端对象。 
为了可以让多客户端同时被并发访问服务器,服务器最好就是将每一个客户端封装到一个单独的线程中,这样就可以同时处理多个客户请求。 


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值