Chinaunix首页 | 论坛 | 博客
  • 博客访问: 278237
  • 博文数量: 58
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 600
  • 用 户 组: 普通用户
  • 注册时间: 2015-11-27 08:37
个人简介

从linux了解世界

文章分类
文章存档

2017年(5)

2016年(51)

2015年(2)

我的朋友

分类: Java

2016-07-30 14:54:05

A类地址,网络号+3个主机号,2^24个,政府单位用
B类地址,网络号+2个主机号,2^16个,事业单位用
C类地址,网络号+1个主机号,2^8个,个人使用
网络编程的所有类都在java.net包中
网络编程3要素
1、ip地址(用类描述)
2、端口号(0-65535,0-1023系统绑定,1024-49151松散绑定,49152-65535公共端口)
3、协议
Java中描述ip的类:inetaddress,私有构造方法,不能new对象
Static Inetaddress getlocalhost()返回本地主机的ip对象,找不到主机任何ip(没有网卡)返回unknownhostException异常
Static Inetaddress getbyname(string)根据主机名(主机名,ip,域名都可以)获取ip对象
Static Inetaddress[] Getallbyname(string)返回主机名(主机名,ip,域名都可以)的所有ip对象/***************************************************************************/
尽量不要使用主机名,使用域名和ip,使用主机名可能会碰到问题
/**************************************************************************/
String gethostaddress()返回ip地址的字符串表示
String Gethostname()返回主机名的字符串表示(也可能返回ip)

Udp
Udp速度快,游戏使用udp,每个数据包最大64k(每次最好1k),Udp中主机号为255的地址为广播地址,给广播地址发信息的时候,在同一网段中的地址都能收到信息。Tcp是没有的。
Datagramsocket:udp的socket类
Datagrampacket:udp的数据包类
Udp发送端的使用步骤:
1、创建udp服务
DatagramSocket socket=new DatagramSocket();//DatagramSocket有多种构造方法(包括制定ip和端口等等),但是一般把ip和端口都写在要发送的数据中,因此使用无参构造方法不指定ip和端口即可
2、创建数据包
DatagramPacket data=new DatagramPacket(byte[],length,inetaddress,port)//这样就指定了ip和端口号,length为字节数组中要发送的数据个数
3、调用udp服务发送数据包
Void Socket.send(data);
4、关闭资源(释放端口号)
Socket.close();
Udp接收端的使用步骤:
1、创建udp服务,并且监听端口
DatagramSocket socket=new DatagramSocket(port);//监听端口
2、    准备空的数据包,用于存储数据
DatagramPacket data=new DatagramPacket(byte[],length);//length是数组的总大小
3、调用udp服务接收数据
Void Socket.receive(data);//实际是存储到了第二步的byte[],接收到数据前阻塞
4、关闭资源(释放端口号)
Socket.close();
Udp中主机号为255的地址为广播地址,给广播地址发信息的时候,在同一网段中的地址都能收到信息。
Datagrampacket方法:
Int getlength();//返回将要发送或者接收到的数据长度(字节数)
Inetaddress getaddress();//返回将要发送或者接收到的ip对象
Udp丢包原因分析:
1、服务端性能强,每秒发10m,客户端性能弱每秒接5m,数据丢失
2、接收端cpu处理速度慢
Tcp
Tcp基于io流,对数据大小没有要求,tcp分客户端服务端,用面向对象思想分别有两个socket类。Tcp客户端:socket,tcp服务端:serversocket
Tcp客户端步骤:
1、建立tcp客户端服务
Socket s=new socket(Inetaddress,port);//常用这个构造方法,直接连接
2、获取socket的输入输出流对象
Outputstream o=s.getoutputstream();//关闭该流会把关联的socket关闭
可以使用转换流变为字符流
3、    利用该流对象写入数据
o.write();
4、关闭资源
s.close();//会把关联的流也关闭
Tcp服务端步骤:
1、建立tcp服务端服务
serverSocket s=new serversocket(port);//监听端口
2、接受客户端连接
Socket socket=s.accept();//没有连接前一直阻塞
3、获取socket的输入输出流对象
Inputstream i=socket.getinputstream();//同样可以转换为字符流
4、读取客户端发送内容
i.read();
5、关闭资源
s.close();//会把accept到的socket也关闭
tcp中的输入流通常转为bufferedreader,输出流通常转为printstream。在socket中获得ip对象等信息,Inetaddressgetinetaddress(),

阅读(1456) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~