//后天是最后一批了,还差8技术分,求打赏
1:网络编程
(1)网络编程:用Java语言实现计算机间数据的信息传递和资源共享
(2)网络编程的三要素
IP地址,端口,协议。
(3):协议
UDP:数据打包,有限制,不连接,效率高,不可靠
TCP:建立数据通道,无限制,效率低,可靠
(4)Socket机制
A:通信两端都应该有Socket对象
B:所有的通信都是通过Socket间的IO进行操作的
(4)UDP协议发送和接收数据
发送:
创建UDP发送端的Socket对象
创建数据并把数据打包
发送数据
释放资源
public class SendDemo{
public static void main(String[] args) throws IOException{
//创建发送端Socket对象
DatagramSocket ds=new DatagramSocket();
//创建数据,并把数据打包
//DatagramPacket(byte[] buf,int length,InetAddress address,int port)构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。
//创建数据
byte[]bys="hello,".getBytes();
int length=bys.length;
InetAddress address=InetAddress.getByName("127.0.0.1");//在给定主机名的情况下确定主机的 IP 地址。
int port=10086;
DatagramPacket dp=new DatagramPacket(bys,length,address,port);
ds.send(dp);//从此套接字发送数据报包。DatagramPacket 包含的信息指示:将要发送的数据、其长度、远程主机的 IP 地址和远程主机的端口号。
ds.close();
}
}
接收:
创建UDP接收端的Socket对象
创建数据包用于接收数据
接收数据
解析数据包
释放资源
public class ReceiveDemo{
public static void main(String[] args) throws IOException{
//创建接收对象
//DatagramSocket(int port)
DatagramSocket ds=new DatagramSocket(10086);
//创建一个数据包
//DatagramSocket(byte[] buf,int length);
byte[] bys=new byte[1024];
int length=bys.length;
DatagramPacket dp=new DatagramPacket(bys,length);
ds.receive(dp);//阻塞式
InetAddress address=dp.getAddress();
//解析数据包,并显示在控制台
//public InetAddress getAddress()
String ip=address.getHostAddress();
//public byte[] getData();获取数据缓冲区
//public int getLength();获取数据的实际长度
byte[] bys2=dp.getData();
int len=dp.getLength();
String s=new String(bys2,0,len);
System.out.println("ip"+"传递的数据是"+s);
ds.close();
}
}
(5)TCP协议发送和接收数据
发送:
创建TCP客户端的Socket对象
获取输出流,写数据
释放资源
public class ClientDemo{
public static void main(String[] args) throws UnknownHostException, IOException{
Socket s=new Socket("127.0.0.1",8888);// 创建发送端的Socket对象
java.io.OutputStream os=s.getOutputStream();
os.write("hello,tcp".getBytes());
s.close();
}
}
接收:
创建TCP服务器端的Socket对象
监听客户端连接
获取输入流,读取数据
释放资源
public class ServerDemo{
public static void main(String[] args) throws IOException{
//创建接收端的对象;ServerSocket(int port)
ServerSocket ss=new ServerSocket(8888);
Socket s=ss.accept();//侦听并接收到此套接字的连接。此方法在连接传入之前一直阻塞。
InputStream is =s.getInputStream();// 获取输入流,读取数据显示在控制台
byte[] bys=new byte[1024];
int len=is.read(bys);//阻塞式方法
String str=new String(bys,0,len);
String ip=s.getInetAddress().getHostAddress();
System.out.println(ip+"---"+str);
s.close();
}
} |
|