网络编程

C网络编程

基本概念:

1、计算机网络
计算机网络是相互连接的独立自主的计算机的集合,
最简单的网络形式由两台计算机组成。

2、网络通信

IP地址:
1)IP网络中每台主机都必须有一个惟一的IP地址;
2)IP地址是一个逻辑地址;
3)因特网上的IP地址具有全球唯一性;
4)32位,4个字节,常用点分十进制的格式表示,例如:192.168.0.16。

协议:
1)为进行网络中的数据交换(通信)而建立的规则、标准或约定;(=语义+语法+规则) ;
2)不同层具有各自不同的协议。

端口号:
端口使用一个16位的数字来表示,它的范围是0--65535,1024以下的端口号保留给预定义的服务。
例如:http使用80端口。


3、OSI各层所使用的协议

1)应用层:远程登录协议Telnet、文件传输协议FTP(网上下载一个软件或者资料的时候就会使用该协议)、 
超文本传输协议HTTP(使用较多,通过IE浏览一个网页的时候就使用该协议)、域名服务DNS(使用较多,
通过网络访问一个计算机一般不使用该主机的IP地址,而是通过该主机的域名访问)、简单邮件传输协议SMTP
(通过Foxmail发送邮件)、邮局协议POP3等(通过Foxmail收邮件);

应用层的协议规定了数据传输的文本格式,最终还是依赖于TCP/IP传输数据

2)传输层:传输控制协议TCP、用户数据报协议UDP;
TCP:面向连接的可靠的传输协议;在利用TCP协议进行通信的时候,首先要经过三步握手建立起通信双方的连接,
一旦连接建立后就可以通信了。TCP协议提供数据确认和重传的机制,保证数据一定能够到达数据接收端。
像打电话。

UDP:是无连接的,不可靠的传输协议;采用UDP协议进行通信时,不需要建立连接,可以直接向一个IP地址发送
数据,至于是不是能够收到不能保证,发送过程中数据有可能丢失、IP地址可能不存在、再者IP地址代表的主机
没有运行等原因都可能导致不能接收到数据。

网络编程(传输层(只关注数据的安全与否,底层不关注))
port端口 端口和服务绑定的,端口和协议绑定的,端口是唯一的
端口取值范围0~65535  注意0~5000左右端口不要用
TCP/IP(确保数据传输安全:三次握手)
传输数组字节流
客户端    服务器端
java.io中哪些流
DataInputStream()
DataOutputStream()
BufferedInputStream()
BufferedOutputStream()
ObjectInputStream()
ObjectOutputStream()
SequenceInputStream()
BufferedReader()
BufferedWriter()
InputStreamReader()
OutputStreamWriter()
PrintWriter()

每一个客户端连接上来,服务器都会给其对应的一个socket对象,
可以开启一个新的任务针对该socket做操作

请求格式(请求行,请求头,请求体)
请求行:method(请求方式) 请求的资源 协议(HTTP/1.1)
请求头:key:value   (规定了服务器将来写回的数据文档类型,编码等及告知服务器一些客户端的基本信息)
    ........    
        (一行空格)    
请求体:body  (携带数据的,提交的方式是POST)
method的两个方式GET|Post,区别在于提交数据的时候参数位置不一样
请求的资源 html jsp php .jpg .png .css .js......

响应格式 (响应行,响应头,响应体)
响应行:协议(HTTP/1.1) 状态码 状态码的描述信息
响应头:key:value (服务器给写回的资源,资源的构建时间,文档格式。资源最后一次修改时间)
    ........
        (空一行)
响应体:body  (服务器给你写回的资源 eg:html页面内容,jsp页面内容,图片的内容等等)

客户端和服务器

C/S  QQ LOL 
B/S  

URL统一资源定位符(标记网络资源的)
语法:protocol://user:passwd@host:port/path资源
ftp://boss:boss@172.16.0.01:8888/
http://www.baidu.com
URL相当于File对象
URL可以知道请求资源的相关信息(协议部分)
    获取请求资源的内容

UDP/IP(数据扔包)
一个包不能超过64kb

3)网络层:网际协议IP、Internet互联网控制报文协议ICMP、Internet组管理协议IGMP。

基于TCP的Socket编程步骤:

1)服务器程序编写:
    ①调用ServerSocket(int port)创建一个服务器端套接字,并绑定到指定端口上;
    ②调用accept(),监听连接请求,如果客户端请求连接,则接受连接,返回通信套接字;
    ③调用Socket类的getOutputStream()和getInputStream获取输出流和输入流,开始网络数据的发送和接收;
    ④最后关闭通信套接字。
2)客户端程序编写:
    ①调用Socket()创建一个流套接字,并连接到服务器端; 
    ②调用Socket类的getOutputStream()和getInputStream获取输出流和输入流,开始网络数据的发送和接收; 
    ③最后关闭通信套接字。

基于UDP的Socket编程步骤:

1)接收端程序编写:
    ①调用DatagramSocket(int port)创建一个数据报套接字,并绑定到指定端口上;
    ②调用DatagramPacket(byte[] buf, int length),建立一个字节数组以接收UDP包 ;
    ③调用DatagramSocket类的receive(),接收UDP包;
    ④最后关闭数据报套接字。
2)发送端程序编写:
    ①调用DatagramSocket()创建一个数据报套接字; 
    ②调用DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port),
    建立要发送的UDP包;
    ③调用DatagramSocket类的send(),发送UDP包;
    ④最后关闭数据报套接字。
 

 .properties
    ip=172.0.0.1
    port=8888
 Properties pro
 pro.getProperty("ip")

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值