为什么学习网络编程呢?好玩呗,哈哈,废话不多说
以前我么查看自己的IP地址可以去Dos窗体里面,现在可以通过java程序的代码来实现了
java提供该类 InetAddress提供我么使用
但是我么发现 InetAddress这个类没有构造方法,怎么办呢?
这个时候我么想起单例模式了,应该有getInetAddress()方法返回 InetAddress对象的
但是,这个方法的名字不是上面的,而是 static InetAddress getLocalHost() 该方法返回一个InetAddress对象的
好了如何获取IP地址呢?
1,我么要创建InetAddress对象。
2,调用InetAddress对象的方法String getHostAddress() 返回以String类型的IP地址
非常简单把,下面代码体现:
public class InetAddressTest {
public static void main(String[] args) throws IOException {
//获取到InetAddress对象
InetAddress ia = InetAddress.getLocalHost();
//好了上面已经获取到了对象了,那么接下来做什么呢,获取IP把
String s = ia.getHostAddress();
//最后输出IP
System.out.println(s);
}
}
非常简单吧,哈哈!!!!
下面就是UDP编程了,这个有点不好理解呢。
UDP编程要写接收端和发送端,这样吧,我么先写接收端在写发送端,其实写哪边都是一样的
个人爱好。
接收端的主要思路步骤:
1,创建Socket服务对象
2,调用功能,解析数据包,显示数据
3,释放资源
更具上面的思路步骤我么代码来体现以下把
接收端有个类叫DatagramSocket,我么查看API先把
“此类表示用来发送和接收数据报包的套接字。” DatagramSocket类不仅可以接收还可以发送呢,所以发送数据也是用该类
该类有构造方法,并且有“空”构造
我么使用public DatagramSocket(int port)这个构造方法使用确定端口号,只有通过该端口才能进行访问
好了假设对象有了,那么接下来就是调用功能解析数据包并显示数据了
解析数据包之前需要接收到数据包把,所以我么首先调用接收数据包的方法
receive(DatagramPacket p) 从此套接字接收数据报包。
DatagramPacket是一个类,我么先去API里面查看一下有哪些功能和方法
该类中显示出DatagramPacket(byte[] buf, int length, InetAddress) 构造数据报包,用来将长度为 length 的包发送到指定主机上
我么通过这个类了解,可以定义字节数组大小为1024,用数组.length
好了,下面来解析数据包把,使用DatagramSocket对象的 getAddress() 方法返回InetAddress类型并在此调用InetAddress类中的getHostAddress()
返回IP。
解释一下:
首先我么调用getAddress()是返回某机器的IP,然后因为是InetAddress数据类型因此可以调用获取IP的方法
为什么需要这个呢??到时候谁发送的消息通过IP就可以知道的。
接下来在创建一个字节数据调用public byte[] getData()返回数据缓冲区。接收到的或将要发送的数据从缓冲区中的偏移量 offset 处开始,持续 length 长度。
并使用getLength()获取长度,
并用String来接受发送的消息,把字节数组加入0,getLength()
本人语言组织能力感觉不强,实现没看懂我上面说什么就直接看代码把,如果写错了请指出
直接代码体现:
public class ReceiveDemo {
public static void main(String[] args) throws IOException {
//创建Socket对象,该类用于接收数据
DatagramSocket ds = new DatagramSocket();
//DatagramPacket对象创建
byte buf[] = new byte[1024];
DatagramPacket packet = new DatagramPacket(buf, buf.length);
//接收数据包,接收的数据包里面的数据类型是DatagramPacket,所以在此之前先创建DatagramPacket对象
ds.receive(packet);
//数据包已经接收到了,下面就是解析数据包了,有点麻烦,我么该怎么做?
/*
* 1,我么可以获取到IP知道是谁发送的数据
* 2,数据介解析后我么要知道长度是哪里到哪里的,不然数据可能会现混乱的
*/
String ip = packet.getAddress().getHostAddress(); //getAddress返回但是 InetAddress然后通过 InetAddress返回IP
byte by[] = packet.getData(); //返回数据缓冲区,从缓冲区中的偏移量 “起始处 ” 开始,持续 length 长度。
String s = new String(by,0,by.length); //这就是获取到的数据长度,
System.out.println(ip+"..."+s);
//最后关闭资源
ds.close();
}
}
好了,接收端已经写好了,再写发送端咯。
明确发送端思路步骤
1,创建UDP的发送Socket服务对象
2,创建数据,数据打包,发送数据
3,关闭资源
上面我么知道DatagramScoket类是具有方式和接收的功能的,所以还是创建DatagramSocket对象
好了对象已经明确了,接下来的是什么呢?
创建数据
1,接收端的DatagramPacket类接收的只是byte,所以我么发送要更具该类写,所以是一个byte类型
2,然后明确数组的长度
3,在给点计算机名获取到ip
4,明确端口,和接收端的端口一致
好了剩下的工作就是发送出去了,如何发送出去呢?
DatagramPacket(byte[] buf, int length, InetAddress address, int port)
构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。
最后使用Socket对象中的send()方法发送数据包
最后一步就是释放资源。
代码体现:
public class SendDemo {
public static void main(String[] args) throws IOException {
//创建Socket对象
DatagramSocket socket = new DatagramSocket();
//对象创建好了以后就是创建数据以及打包并发送数据,更具接收端得知我么要更具DatagrmPacket类来创建
byte[] by = "Socket编程挺难的".getBytes();
int len = by.length;
InetAddress ia = socket.getInetAddress().getByName("itcast-121"); //更具主机名获取到ip
int pot = 10088; //端口号与接收端一致
DatagramPacket packet = new DatagramPacket(by, len, ia,pot);
//数据打包后,发送出去把
socket.send(packet);
//关闭资源
socket.close();
}
}
小提示,想要运行先运行接收端在运行发送端
下面就是TCP编程了。
TCP把上面的两端称为 服务器,和,客户端
服务器接收消息,客户端发送消息
下面我么还是来写服务器吧:
思路步骤:
1,创建Socket对象
2,监听并接受连接此服务器的客户端
3,获取输入流数据,并显示
4,释放资源
ServerSocket 此类实现服务器套接字
我么使用 ServerSocket(int port) 创建绑定到特定端口的服务器套接字。
只能通过该端口来进行访问。
如何监听呢?
Socket accept() 侦听并接受到此套接字的连接。此方法在连接传入之前一直处于阻塞状态。
查看API得知Socket有个获取 InputStream这个字节流对象
定义一个byte数组,存放数据1024
定义一个int接收数组中的元素
最后使用String把字节数组 转换成字符串
最后释放资源
代码体现:
public class ServerSocketTest {
public static void main(String[] args) throws IOException {
//创建对象
ServerSocket ss = new ServerSocket(11111);
//监听并连接
Socket sk = ss.accept();
//获取输入流对象
InputStream is = sk.getInputStream();
byte by[] = new byte[1024];
int len = is.read(by);
String str = new String(by,0,len); //获取数据,就重0到len的长度
System.out.println(str);
sk.close();
//一般我是不建议服务器关闭的,服务器是不关的,但是我么这样的小程序没意思还是关闭吧
ss.close();
}
}
服务器已经写好了,那么我么开始写客户端吧
步骤思路:
1,创建客户端的Socket对象
2,建立通道,通道成功后,就可以使用Socket对象的IO流操作。
3,关闭资源
Socket可以返回输出流OutputStream,可以通过它写入数据
最后关闭资源
代码体现:
public class ClientDemo {
public static void main(String[] args) throws IOException {
//创建对象
Socket socket = new Socket(InetAddress.getByName("itcast-121"),11111);
//Socket可以返回输入流对象
OutputStream os = socket.getOutputStream();
//往里面写入数据
os.write("TCP挺好的".getBytes());
socket.close();
}
}
好了以上就是我对网络编程的基础认识,写的不好多多包涵
以前我么查看自己的IP地址可以去Dos窗体里面,现在可以通过java程序的代码来实现了
java提供该类 InetAddress提供我么使用
但是我么发现 InetAddress这个类没有构造方法,怎么办呢?
这个时候我么想起单例模式了,应该有getInetAddress()方法返回 InetAddress对象的
但是,这个方法的名字不是上面的,而是 static InetAddress getLocalHost() 该方法返回一个InetAddress对象的
好了如何获取IP地址呢?
1,我么要创建InetAddress对象。
2,调用InetAddress对象的方法String getHostAddress() 返回以String类型的IP地址
非常简单把,下面代码体现:
public class InetAddressTest {
public static void main(String[] args) throws IOException {
//获取到InetAddress对象
InetAddress ia = InetAddress.getLocalHost();
//好了上面已经获取到了对象了,那么接下来做什么呢,获取IP把
String s = ia.getHostAddress();
//最后输出IP
System.out.println(s);
}
}
非常简单吧,哈哈!!!!
下面就是UDP编程了,这个有点不好理解呢。
UDP编程要写接收端和发送端,这样吧,我么先写接收端在写发送端,其实写哪边都是一样的
个人爱好。
接收端的主要思路步骤:
1,创建Socket服务对象
2,调用功能,解析数据包,显示数据
3,释放资源
更具上面的思路步骤我么代码来体现以下把
接收端有个类叫DatagramSocket,我么查看API先把
“此类表示用来发送和接收数据报包的套接字。” DatagramSocket类不仅可以接收还可以发送呢,所以发送数据也是用该类
该类有构造方法,并且有“空”构造
我么使用public DatagramSocket(int port)这个构造方法使用确定端口号,只有通过该端口才能进行访问
好了假设对象有了,那么接下来就是调用功能解析数据包并显示数据了
解析数据包之前需要接收到数据包把,所以我么首先调用接收数据包的方法
receive(DatagramPacket p) 从此套接字接收数据报包。
DatagramPacket是一个类,我么先去API里面查看一下有哪些功能和方法
该类中显示出DatagramPacket(byte[] buf, int length, InetAddress) 构造数据报包,用来将长度为 length 的包发送到指定主机上
我么通过这个类了解,可以定义字节数组大小为1024,用数组.length
好了,下面来解析数据包把,使用DatagramSocket对象的 getAddress() 方法返回InetAddress类型并在此调用InetAddress类中的getHostAddress()
返回IP。
解释一下:
首先我么调用getAddress()是返回某机器的IP,然后因为是InetAddress数据类型因此可以调用获取IP的方法
为什么需要这个呢??到时候谁发送的消息通过IP就可以知道的。
接下来在创建一个字节数据调用public byte[] getData()返回数据缓冲区。接收到的或将要发送的数据从缓冲区中的偏移量 offset 处开始,持续 length 长度。
并使用getLength()获取长度,
并用String来接受发送的消息,把字节数组加入0,getLength()
本人语言组织能力感觉不强,实现没看懂我上面说什么就直接看代码把,如果写错了请指出
直接代码体现:
public class ReceiveDemo {
public static void main(String[] args) throws IOException {
//创建Socket对象,该类用于接收数据
DatagramSocket ds = new DatagramSocket();
//DatagramPacket对象创建
byte buf[] = new byte[1024];
DatagramPacket packet = new DatagramPacket(buf, buf.length);
//接收数据包,接收的数据包里面的数据类型是DatagramPacket,所以在此之前先创建DatagramPacket对象
ds.receive(packet);
//数据包已经接收到了,下面就是解析数据包了,有点麻烦,我么该怎么做?
/*
* 1,我么可以获取到IP知道是谁发送的数据
* 2,数据介解析后我么要知道长度是哪里到哪里的,不然数据可能会现混乱的
*/
String ip = packet.getAddress().getHostAddress(); //getAddress返回但是 InetAddress然后通过 InetAddress返回IP
byte by[] = packet.getData(); //返回数据缓冲区,从缓冲区中的偏移量 “起始处 ” 开始,持续 length 长度。
String s = new String(by,0,by.length); //这就是获取到的数据长度,
System.out.println(ip+"..."+s);
//最后关闭资源
ds.close();
}
}
好了,接收端已经写好了,再写发送端咯。
明确发送端思路步骤
1,创建UDP的发送Socket服务对象
2,创建数据,数据打包,发送数据
3,关闭资源
上面我么知道DatagramScoket类是具有方式和接收的功能的,所以还是创建DatagramSocket对象
好了对象已经明确了,接下来的是什么呢?
创建数据
1,接收端的DatagramPacket类接收的只是byte,所以我么发送要更具该类写,所以是一个byte类型
2,然后明确数组的长度
3,在给点计算机名获取到ip
4,明确端口,和接收端的端口一致
好了剩下的工作就是发送出去了,如何发送出去呢?
DatagramPacket(byte[] buf, int length, InetAddress address, int port)
构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。
最后使用Socket对象中的send()方法发送数据包
最后一步就是释放资源。
代码体现:
public class SendDemo {
public static void main(String[] args) throws IOException {
//创建Socket对象
DatagramSocket socket = new DatagramSocket();
//对象创建好了以后就是创建数据以及打包并发送数据,更具接收端得知我么要更具DatagrmPacket类来创建
byte[] by = "Socket编程挺难的".getBytes();
int len = by.length;
InetAddress ia = socket.getInetAddress().getByName("itcast-121"); //更具主机名获取到ip
int pot = 10088; //端口号与接收端一致
DatagramPacket packet = new DatagramPacket(by, len, ia,pot);
//数据打包后,发送出去把
socket.send(packet);
//关闭资源
socket.close();
}
}
小提示,想要运行先运行接收端在运行发送端
下面就是TCP编程了。
TCP把上面的两端称为 服务器,和,客户端
服务器接收消息,客户端发送消息
下面我么还是来写服务器吧:
思路步骤:
1,创建Socket对象
2,监听并接受连接此服务器的客户端
3,获取输入流数据,并显示
4,释放资源
ServerSocket 此类实现服务器套接字
我么使用 ServerSocket(int port) 创建绑定到特定端口的服务器套接字。
只能通过该端口来进行访问。
如何监听呢?
Socket accept() 侦听并接受到此套接字的连接。此方法在连接传入之前一直处于阻塞状态。
查看API得知Socket有个获取 InputStream这个字节流对象
定义一个byte数组,存放数据1024
定义一个int接收数组中的元素
最后使用String把字节数组 转换成字符串
最后释放资源
代码体现:
public class ServerSocketTest {
public static void main(String[] args) throws IOException {
//创建对象
ServerSocket ss = new ServerSocket(11111);
//监听并连接
Socket sk = ss.accept();
//获取输入流对象
InputStream is = sk.getInputStream();
byte by[] = new byte[1024];
int len = is.read(by);
String str = new String(by,0,len); //获取数据,就重0到len的长度
System.out.println(str);
sk.close();
//一般我是不建议服务器关闭的,服务器是不关的,但是我么这样的小程序没意思还是关闭吧
ss.close();
}
}
服务器已经写好了,那么我么开始写客户端吧
步骤思路:
1,创建客户端的Socket对象
2,建立通道,通道成功后,就可以使用Socket对象的IO流操作。
3,关闭资源
Socket可以返回输出流OutputStream,可以通过它写入数据
最后关闭资源
代码体现:
public class ClientDemo {
public static void main(String[] args) throws IOException {
//创建对象
Socket socket = new Socket(InetAddress.getByName("itcast-121"),11111);
//Socket可以返回输入流对象
OutputStream os = socket.getOutputStream();
//往里面写入数据
os.write("TCP挺好的".getBytes());
socket.close();
}
}
好了以上就是我对网络编程的基础认识,写的不好多多包涵