Java网络编程的知识点 Socket TCP UDP

网络编程:

网络模型
OSI参考模型:
应用层:将数据封装一下                         应用层
表示层:                                       表示层
会话层:                                      会话层:
传输层:                                      传输层            
网络层:付给封装的数据IP地址                   网络层
数据链路层:                                  数据链路层
物理层:网线、蓝牙。。是物理层设备 ————    物理层        

整个下来就叫数据封包                              拆包
TCP/IP参考模型:
应用层----HTTP/FTP协议
传输层---TCP/IP
网际层----IP
主机至网络层

网络通信要素:ip地址、端口号 、传输协议
java.net包
1、IP地址:用于描述IP对象的类、InetAddress
 InetAddress i=InetAddress.getLocalHost();//获得本机IP对象
          i.getHostAddress();//获取本机地址
如何获取任意主机地址??
InetAddress  ir=InetAddress.getByName("192.168.1.234")//传入你要解析的IP地址可以传入主机名 但要解析很慢主张IP地址
例如百度肯定不是一台主机




127.0.0.1 没有配置任何IP地址默认本机回环地址

2、端口
数据要求发送到对方指定的应用程序上。为了标识这些应用程序所以这些网络应用程序都用数字标识,
为了方便称呼这个数字叫做端口 :逻辑端口0-65535 (0-1024最好不要用)
3、定义通信规则。就是协议
国际组织定义了通用协议:TCP/IP

UDP   QQ,寄包裹、网络视频会议
将数据及源和目的封装称数据包中,不需要建立连接
每个数据包的大小限制在64K内
因无连接,是不可靠协议
不需要建立连接,速度快、

TCP
建立连接,形成传输数据的通道
在链接中进行大数据量传输、
通过三次握手完成连接,是可靠协议
必须建立连接,效率会降低

网络编程即Socket 为网络编程提供的一种机制

需求:定义一个udp传输方式,用于发送数据
思路:
1、定义一个socket服务 DatagramSocket
2、将数据封装到数据包中 DatagramPacket
3、通过DatagramSocket里发送方法send()发送数据
4、关闭资源


需求:定义一个udp传输方式用于接收数据
思路:
1、定义udpsocket服务。通常会监听一个端口,其实就是给这个接收网络应用程序定义数字标识、、
方便于明确哪些数据过来该应用程序可以处理
2、先定义一个字节数组然后定义一个数据包用于存储接受的数据DatagramPacket
因为数据包有更多的功能来取出不同数据
3、通过socket服务的receive方法来存储在已定义好的数据包中
4、通过数据包对象的特有功能将这些数据取出打印在控制台上
5、关闭资源

UDP键盘录入方式数据:
DatagramSocket ds = new DatagramSocket();
BufferedReader bfr = new BufferedReader(new InputStreamReader(System.in));
String line = null;
while ((line = bfr.readLine()) != null) {
if (line.equals("886")) {
 break;
 }
byte[] buf = line.getBytes();//把键盘录入数据
DatagramPacket dp = new DatagramPacket(buf, buf.length,
InetAddress.getByName("127.0.0.1"), 10005);
ds.send(dp);

}
ds.close();


TCP传输:
1、tcp分客户端 和服务端
2、客户端对应的对象是Socket 服务端对应的对象是ServerSocket

客户端

1、创建客户端服务对象Socket()
      并指定连接的主机和端口
Socket s=new Socket("服务器端的ip地址",端口号);
2、为了发送数据应获取socket流中的输出流
OutputStream out=s.getOutputStream();
out.write("tcp wo lai le".getBytes());
s.close();


服务端:
1、建立服务端的socket服务 ServeSocket  并监听一个端口
ServerSocket ss=new ServerSocket(10006);
2、获取连接过来的客户端对象
通过ServerSocket的accept方法。没有连接就会等,所以这个方法是阻塞式的

Socket s=ss.accept();

3、客户端如果发来数据,那么服务端要使用对应的客户端对象,并取到该客户端对象的读取流来读取数据
并打印在控制台
InputStream in=s.getInputStream();
byte[] buf=new byte[1024];
int len=0;
len=in.read(buf);
String s=new String(buf,0,len);
system.out.println(s)
//获取客户端发来的ip地址
String  ip=s.getInetAddress().getHostAddress();


4、关闭服务器(可选)关闭客户端必选
s.close();



。。。。。。。。。。。。。。。。。。。。。。。。。。。。
文本转换服务器
将客户端发到服务端的信息服务端转换成大写发回来

客户端:
1、建立服务  Socket s=new Socket("127.0.0.1",10008);
try{
2、键盘录入:源 BufferedReader bfr=new BufferedReader(new InputStreamReader(system.in));
目的;网络输出流  PrintWriter pw=new PrintWriter(s.getOutputStream());
 //定义一个网络输入流接收来自服务端返回的信息  BufferedReader bfrIn=new BufferedReader(new InputStreamReader(s.getInputStream()));
3、String line=null;
while((line=bfr.readLine())!=null){
if(line.equals("over"))
break;
pw.println(line);//发送到客户端
String str=bfrIn.readLine();//接收来自服务端的信息
system.out.println(“server”+str);//并打印在控制台


}

s.close();
bfr.close();
}catch(){


}

服务端:
1、建立服务 ServerSocket ss=new ServerSocket(10008);
2、获取socket对象 输入流 Socket s=ss.accept();

源:socket输入流:BufferedReader bfrIn=new BufferedReader(new InputStreamReader(s.getInputStream()))
目的 :socket输出流:printWriter pw=new PrintWriter(s.getOutputStream());
String line=null;
while((line=bfrIn.readerLine)!=null){
pw.println(line.ToUpperCase());

}
bfrIn.close();
s.close();


TCP复制文件
要注意的是结束标记:用socket里的一个方法shutdownOutput();关闭网络输出流,也是文件的一个结束标记-1

需求:上传图片
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

用于描述URL的对象 URL:同一资源定位符
 URL url=new URL("http://127.0.0.1:8080/mydemo/html?name=haha&age=20");
url.getPtotocol();//获取协议
url.getHost();//获取主机
url.getPort();//获取端口号
url.getPath();//获取路径
url.getFile();//获取文件名
url.getQuery();//获取传入的参数

URLConnection  拆包:应用层 不用再定义Socket
URLConnection conn=url.openConnection();



Socket 有一个无参数的构造函数怎么样传ip地址和端口号呢。
socket里有一个connect()方法里面传入的参数是InetSocketAddress


域名解析:(将主机名翻译成ip地址)
DNS服务器,域名解析

某一个网站不想开启可以找
C:\Windows\System32\drivers\etc\hosts文件
127.0.0.1    网站的地址  此时网站走的是本地主机,不走网络DNS
、、


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值