第六天_网络
来源:互联网 发布:徐州淘宝店招聘包装工 编辑:程序博客网 时间:2024/06/05 09:36
1.基于TCP的程序 【这个程序有很多异常等待处理,本人暂不能完善,请见谅,谢谢~~】
package com.panpan;import java.io.*;import java.net.*;
public class testTCPServer { /** * @Server应先启动 */
public static void main(String[] args){
try{ String st= null;
ServerSocket ss= new ServerSocket(9226);//建立服务器端【端口】
Socket s= ss.accept();//【阻塞式,同步式】接受客户端返回类型为Socket;
System.out.println("接受到客户端申请");//有连接自动检测到能!;
DataInputStream din= new DataInputStream(s.getInputStream());
//得到从客户端来的流,直接赋给din,括号里【本身就是字节流?】
//从键盘获取传给服务器端
InputStreamReader rin= new InputStreamReader(System.in);
BufferedReader brin= new BufferedReader(rin);
//从键盘获取传给服务器端
OutputStream out= null;
out= s.getOutputStream();//写到客户流里;
DataOutputStream dout= new DataOutputStream(out);//用包装成字符流;
do{ System.out.println(din.readUTF());
st= brin.readLine();
dout.writeUTF("服务器说:"+st+"客户端你的地址是:"+s.getInetAddress()+s.getPort());
}while(!st.equals("exit"));
din.close();//关闭接收流; s.close();//关闭连接;
}catch(IOException e){ e.printStackTrace();System.out.println("IO错误"+e);}}}
package com.panpan;import java.io.*;import java.net.*;
public class testTCPClient { /** *再启动Client* **/
public static void main(String[] args) {
try{ String st= null;
Socket s= new Socket("192.168.1.101",9226);//客户端【服务器地址和开放的端口】
OutputStream ot= s.getOutputStream();//到服务器端的流;给os直接赋值,不是new;
DataOutputStream dot= new DataOutputStream(ot);//套接在字节流上,可发送字符!
//从键盘获取传给服务器端
InputStreamReader rin= new InputStreamReader(System.in);
BufferedReader brin= new BufferedReader(rin);
//从键盘获取传给服务器端
DataInputStream din= new DataInputStream(s.getInputStream());//包装成字符流,接受服务器端的字符
do{ st= brin.readLine();
dot.writeUTF("客户端说:"+st);//给服务器端发送字符
dot.flush();//清空发送流的缓存
System.out.println(din.readUTF());//输出从服务器端得到的UTF字符!
}while(!st.equals("exit"));
dot.flush();//清空发送流的缓存
dot.close();//关闭发送流
}catch(ConnectException e){e.printStackTrace();System.out.print("服务器失败");}}
2.基于UDP的程序【服务器端一般都是无限循环,不退出?】发送float数据,注释掉了的是发送字符串
package com.panpan;import java.net.*;import java.io.*;
public class testUDPServer { /** * @UDP服务器端 */
public static void main(String[] args) throws Exception {
byte[] buf= new byte[1024];//建立字节个数组1k;
DatagramPacket dp= new DatagramPacket(buf,buf.length);
//让包裹占用buf,的全部长度;
DatagramSocket ds= new DatagramSocket(9226);
//建立接受机制,监听端口9226,客户端都要把数据发送到个端口
while(true){
ds.receive(dp);//接收包,放入dp占用那的buf数组里;
// 接受到【数据类型】从包中取出即可,传送时已经到dp-buf里了!
ByteArrayInputStream bin= new ByteArrayInputStream(buf);
DataInputStream din= new DataInputStream(bin);
float f= din.readFloat();//用IO,从字节数组里读出一个float数据;
System.out.println(f);
//System.out.println(new String(buf,0,dp.getLength()));
//输出放入buf数组里的数据【转换成字符串形式??】 }}}
package com.panpan;import java.io.*;import java.net.*;
public class testUDPClient { /** * @param args */
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
/* byte buf[]=(new String("HelloUDP").getBytes());
//把字符串转换成字节数组,放入buf数组里;
DatagramPacket dp= new DatagramPacket(buf,buf.length,new InetSocketAddress("192.168.1.101",9226));
//UDP包【指向】包装数组,把UDP包打上,套用buf数组的大小,和发往的地址SocketAddress;
*/
//传递数值型数据,打包发走
float n=1.23456f;
ByteArrayOutputStream bout= new ByteArrayOutputStream();
DataOutputStream dout= new DataOutputStream(bout);
dout.writeFloat(n);//把float数据写入字节内存
byte[] buf= bout.toByteArray();//把字节内存转换成字节数组,就可以打包传送了。
//转换成字节数组,才能传送;在服务器端还要转换成相应的类型
DatagramPacket dp= new DatagramPacket(buf,buf.length,new InetSocketAddress("192.168.1.101",9226));
DatagramSocket ds= new DatagramSocket(9227);
ds.send(dp);//发送 ds.close();}}
【网摘,关于网络协议】
TCP:面向连接,可靠的协议。UDP:不可靠,无连接的协议(SNMP,DNS)
ISO 国际标准化组织,OSI 开放系统互连的体系结构
1.OSI网络分层:各层协议:物理层 : EIA/TLA RS...数据链路层: SDLC,STP...
网络层 : IP,IPX... 传输层: TCP,UDP...
会话层 : ZIP... 表示层: JPEG,MPEG...应用层: FTP,HTTP,SNMP...
2 TCP/IP参考模型
①TCP/IPI网络分层(对应OSI网络分层): 主机-网络层(物理层,数据链路层)
网络互联层(网络层) 传输层(传输层) 应用层(会话层,表示层,应用层)
②TCP/IP协议:对网络分层的各层次作了简化,【除主机-网络层外】提供完善的协议
③各层主要功能
【主机-网络层】:TCP/IP协议没有提供实现及协议,要求第三方实现的主机-网络层为上层提供一个访问接口,来传递IP数据包。,, 美国电气及电子工程师学会实现的协议集有:以太网(IEEE802.3),令牌环网(IEEE802.4)
【 网络互联层】:功能是发送IP数据包到目标主机(使用了IP协议,规定数据包的格式及数据包寻找路由的流程)
【 传输层】:功能是源主机和目标主机的进程可以会话。它用了二种协议:TCP,UDP,,TCP:面向连接,可靠的协议。UDP:不可靠,无连接的协议(SNMP,DNS)
【应用层】1 TCP应用层的协议:FTP:文件传输协议(网络上传输文件)。TELNET:虚拟终端协议。HTTP :超文本传输协议 HTTPS:安全超文本传输协议 POP3:邮局协议(访问远程服务器上的邮件)IMAP4:消息访问协议(POP3的升级版)SMTP:简单邮件协议(发送电子邮件)3.UDP协议: SNMP :简单网络管理协议,DNS : 域名系统协议
4.IP协议: IP网络中每台主机有唯一的IP用于标识每个主机。IP地址的取值范围:0~255 ,IP地址由IP网址与IP主机地址组成。网络掩码确定IP中哪部分是网址,哪部分是主机地址。IP网址 = 网络掩码 & IP地址(二进制),NIC(统一负责全球的地址规划与管理),CNNIC(中国地区IP分配与管理),192.168.0.0是网络地址,192.168.111.111广播地址
① 发送数据包的过程
IP网络上的主机通过ARP(地址解析协议),向相同IP网址的主机(包括真正的物主机地址:物理地址和IP地址)发送数据包。
ARP通过本地网络的路由的物理地址向目标IP地址发送数据包。具体按以下搜索并处理数据包:数据包生命周期已到就抛弃---〉路由表的主机---〉 路由表,匹配子网的路由器--->路由表,匹配网络的路由器---〉默认路由。
②域名 :域名是从右到左表达意义,一般表示为:主机机器.单位名.网络名.顶层域名.
DNS(Domain Name System):提供域名与IP地址的转换,因它存放了域名与IP地址的映射信息。
③URL(Uniform Resource Locator:统一资源定位器)组成部分:
应用层协议://主机IP地址或域名/资源所在路径/文件名,URL中常见的协议:ftp,file(访问本地计算机所在文件)
5.TCP协议及端口T
①TCP协议确保进程间顺序通信及在IP协议在传送数据时的顺序重组包及数据完整。
②端口范围为:0~65535,0~1023一般为固定服务。21为FTP,25为SMTP(邮件传输服务)80为HTTP(文本传输)135为RPC(远程过程调用)
③客户进程请求服务器进行TCP连接时,操作系统为随机分配一个未占用端口,断开时端口被释放。 注意事项:TCP,UDP通过端口标识进程。TCP与UDP端口取值各自自由,允许这二个端口取值一样。
6.RFC(Request For Comment) RFC:互联网相关技术规范性文档。
7.客户/服务器通信模式 :有二个通信进程中,A为客户端进程,B为服务端进程, A向B发出请求,B响应请求。B可向多个客户端提供服务。 网络应用层规定了客户程序与服务程序通信的细节。如HTTP协议规定了请求与响应格式。
8.应用层通用服务端口 :
文件传输服务21FTP,远程登录23TELNET ,传输邮件服务25SMTP
超文本传输服服80HTTP,访问远程服务的邮件服务110POP3
互联网消息存取服务143IMAP4,安全的超文本传输服务443HTTPS
安全的远程登录992TELNETS,安全的互联网消息存取服务993IMAPS
这章暂时了解了,两对儿基本的发送跟接受,TCP/UDP,知道的越多,才发现不知道的也跟着变多。。。但是我们怎样才能在有限的时间作出最适合,最有用的,才是真正的知识!改变思想,才能创造!做好自己努力能做的!
- 第六天_网络
- 黑马程序员_第六天
- android基础_第六天
- 六级_第六天
- 黑马程序员——第六篇_网络编程
- 网络编程学习第六天
- java面向对象2_第六天
- 黑马程序员_第六天总结
- Android网络与数据存储_学习笔记_第六周:SQLite与ContentProvider
- 【学习笔记】读项亮的《推荐系统实践》_第六章利用社交网络数据
- Objective-C 10天学习_第六天
- Objective-C 10天学习_第六天
- 黑马程序员_毕向东java基础视频第六天
- python学习日记_第六天(ex14~15)
- struts2学习_第六天(小知识总结)
- 第六章 网络层
- 黑马程序员_第六天_高新技术之理解对JavaBean的内省操作
- 第六章 09_练习
- Solar Model的文件结构
- C#对EXCEL笔记
- C#执行SQL语句(带事务)
- out与ref区别
- DOM对象介绍
- 第六天_网络
- AJAX 框架 用 Asp.net ajax 还是 Jquery
- Ajaxcontroltoolkit/Samples
- Solar Model数据库操作之读取数据
- 单片机训练题
- SQL约束(外键、主键、触发器)
- sql中all,any,some
- 如何认识ADC参数中“精确度”与“分辨率”的不同
- sql使用convert转化长日期为短日期的总结