对于刚学java的同学,总感觉只要学好java就好吗?不,其实你做一个程序还要能上线才是好的程序。上线又是靠什么呢?没错就是网络!
网络编程
网络编程概述
网络编程就是将不同地理位置的计算机,通过IO流进行数据传递
一、网络模型
二、网络编程的三要素
1、IP地址(InetAddresss)
1.1、IP地址表示计算机在网络设备中的标识
1.2、不宜记忆,可以通过主机名来记
1.3、本机地址:127.0.0.1localhost
2、端口号
2.1、用于标识进行的逻辑地址
2.2、有效端口号:0--655360-1024为系统保留端口
3、传输协议
定义通讯的规则
三、IP地址
1、它是网络中的设备标识
2、不易记忆,可用主机名表示,两者存在映射关系
3、本机回环地址:127.0.0.1,主机名为:localhost。
IP地址:java中对应的是InetAddress类,存在于java.net包中。
IP地址分为5类:
A类 1.0.0.0 到126.0.0.0
0.0.0.0 和127.0.0.0保留
B类 128.1.0.0到191.254.0.0
C类 192.0.1.0 到223.255.254.0
D类 224.0.0.0到239.255.255.255用于多点广播
E类 240.0.0.0到255.255.255.254保留
255.255.255.255用于广播
InetAddress类
importjava.net.*;
class IPDemo{
publicstatic void main(String[] args) throws UnknownHostException{
//通过名称(ip字符串or主机名)来获取一个ip对象。
InetAddress ip =InetAddress.getByName("www.baidu.com");
System.out.println("addr:"+ip.getHostAddress());
System.out.println("name:"+ip.getHostName());
}
}
四、网络编程UDP—TCP
UDP的特点:(面向无连接)
1、将数据源和目的封装到数据包中,不需要建立连接
2、每个数据包的大小限制在64K
3、无连接,是不可靠协议
4、无连接,速度快
TCP特点:(面向连接)
1、建立连接,形成传输数据的通道
2、在连接中进行大量数据传输
3、要经过三次捂手完成连接,是可靠协议
4、需要建立连接,速度慢
五、Socket(Socket也称套接字)
1、Socket是为网络通信提供的一种机制
2、通信的两端都有Socket
3、网络通信其实就是Socket间的通信
4、数据在Socket间通过IO传输
通信的步骤:
1,找到IP地址
2,数据要发送到对象指定应用程序,为标识这些应用程序,所以给这些网络应用程序都用数字标识,为方便称呼这个数字,叫做端口,即逻辑端口。
3,定义通信规则,称之为协议。国际组织定义了通用协议,即TCP/IP。
注意:必须要有数字标识(端口号)才能将数据发送到应用程序上。
UDP发送和接收端
UDP发送端
/*
* UDP发送数据
*/
/*
* 1、创建发送端Socket对象
* new DatagramSocket对象
* 2、将数据进行打包
* new DatagramPacket
* 3、发送数据
* send
* 4、关闭资源
* close
*/
public class UDPSocket {
public static void main(String args[]) throws IOException{
//创建UDP发送端Socket对象
DatagramSocket ds=new DatagramSocket();
String str="你好";
//因为数据打包,打包的是字节,所以讲字符串进行转换
byte [] b=str.getBytes();
//获取数据的长度
int len=b.length;
//封装目的地
InetAddress id=InetAddress.getByName("192.168.24.49");
//封装端口号
int port=8080;
//将数据,目的地,端口进行封装
DatagramPacket dp=new DatagramPacket(b,len,id,port);
//发送数据
ds.send(dp);
ds.close();
}
}
UDP接收端
/*
* 接收端
*/
/*
* 1、创建UDPSocket对象,并制定端口号
* new DatagramSocket(端口号)
* 2、创建接收端数据包,进行拆包
* new DatagramPacket
* 3、接受数据
* receive
* 4、关闭资源
*
*/
public class UDPReceive {
public static void main(String [] args) throws IOException{
//创建UDPSocket对象
DatagramSocket ds=new DatagramSocket(8080);
//定义数据包,接受数据,进行拆包
while(true){
byte [] b=new byte[1024];
DatagramPacket dp=new DatagramPacket(b,b.length);
//接受数据
ds.receive(dp);
String ip=dp.getAddress().getHostAddress();
String data=new String (dp.getData(),0,dp.getLength());
int port=dp.getPort();
System.out.println(ip+":"+data+":"+port);
}
}
}
TCP发送和接收端
TCP发送端
/*
* TCP发送端
*/
/*
* 1、创建发送端Socket对象,并建立连接
* 2、创建字节写入流对象
* 3、写入数据
* 4、关闭资源
*/
public class ClientTCP {
public static void main(String args[]) throws IOException{
//创建发送端Socket对象
Socket s=new Socket("192.168.24.43",10086);
//创建写入流对象
OutputStream os=s.getOutputStream();
//写入数据
os.write("你好,我来了".getBytes());
//关闭资源
os.close();
}
}
TCP服务端
/*
* TCP服务端
*/
/*
* 1、创建服务端Socket对象
* new ServerSocet()
* 2、创建Socket对象用来监听接受端
* accept()
* 3、创建读取流,并获取数据
* getInputStream()
* 4、关闭资源
*/
public class ServerTCP {
public static void main(String [] args) throws IOException{
//创建服务端Socket对象
ServerSocket ss=new ServerSocket(10086);
//创建Socket对象,来监听接受端
Socket s=ss.accept();
//创建读取流对象getInputStream
InputStream is=s.getInputStream();
//定义一个字节数组用来读取数据
byte [] b=new byte[1024];
int len=is.read(b);
String str=new String(b,0,len);
System.out.println(str);
s.close();
}
}
看到这里大家应该对网络编程有了一定的了解吧,如果大家喜欢这篇文章可以点一下关注哦!!!
网友评论