网络编程(套接字)


根据网络来进行的数据传输

分层

物理层
数据链路层
网络层
传输层(协议UDP、TCP)
会话层
表示层
应用层

IP

IP地址-----确定网络中主机的位置
IPv4由四位0~255的数字组合而成
10.8.13.1

域名

不会重复,可以映射成对应的IP地址

端口

计算机和外界进行数据交互的媒介

端口号(0-65535)

0-1024之间的端口号基本已经被系统提前占用,推荐使用1024后面的端口号

InetSocketAddress

提供IP和端口号
1)创建对象 InetSocketAddress isa=new InetSocketAddress(“localhost”,8090)
注:localhost解析成的IP是127.0.0.1,—永远指向本地
2)获取IP地址
isa.getAddress();
3)获取主机名
isa.getHostName();

UDP

底层基于流
传输时不建立连接,传输不安全但是效率较高
底层是很据数据包来做数据传输(数据包最大64KB)
适用于:视频、语音、直播等等
DatagramSocket、DatagramPacket

发送端

1、创建UDP发送端对象
2、创建数据包,准备数据并且指定IP和端口号
3、发送数据包
4、关流

DatagramSocket ds=new DatagramSocket();
DatagramPocket dp=new DatagramPocket("zuo".getBytes(),"zuo".getBytes().length,new InetSocketAddress("127.0.0.1",8091));
ds.send(dp);
ds.close;

接收端

1、创建UDP接收端对象并且监听端口号
2、创建数据包来接收数据
3、接收数据
4、关流
5、解析数据包里接收的数据

DatagramSocket ds=new DatagramSocket(8091);
DatagramPocket dp=new DatagramPocket(new Byte[10],10);
ds.receive(dp);
ds.close();
dp.getAddress();
new String(dp.getData(),0,dp.getLength());

TCP

底层基于流
传输需要建立连接(三次握手),传输过程安全但是传输效率较低
底层是根据字节流来进行数据传输(理论上不限制传输数据的大小)
适用场景:聊天、文件上传和下载等等
Socket、ServerSocket

客户端

1.创建TCP客户端对象
2.发起连接
3.获取自带的字节输出流
4.写出数据
5.通知服务器端数据已经写出完毕
6.关流

Socket s=new Socket();
s.connect(new InetsocketAddress("127.0.0.1",8091));
OutputStream os=s.getOutputStream();
os.write("yu".getBytes());
s.shutdownOutput();
s.close();

服务器端

1、创建TCP服务器端对象并且监听端口号
2、接受连接
3、获取自带的字节输入流
4、读取数据
5、通知客户端数据已经接收完毕
6、关流

ServeSocket ss=new ServerSocket(8091);
Socket s=ss.accept();
InputStream is=s.getInputStream();
byte[] bs=new byte[100];
int len=-1;
while(((len=is.read(bs))!=-1){
System.out.println(new String(bs,0,len));}
s.shutdownInput();
s.close;
ss.close;}}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值