1.UDP
网络编程操作
DatagramSocket数据套接字与DatagramPacket数据包
完成步骤:
建立发送端,接收端。
创建数据
建立数据包。
调用Socket的发送接收方法。
关闭Socket。
发送端与接收端是两个独立的运行程序。
代码案例
发送端
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class Demo_Udpsend {
public static void main(String[] args) throws IOException {
//建立发送端
DatagramSocket ds = new DatagramSocket();
//创建数据
String s = "我爱java";
//建立数据包 需要字节数组 长度 目标地址 端口号
//将字符串转换为字节数组
byte[] bytes = s.getBytes();
//获取数组长度
int length = bytes.length;
//获取计算机名
InetAddress Ip = InetAddress.getByName("192.168.31.174");
//指定接口
int port = 8824;
DatagramPacket dp = new DatagramPacket(bytes, length,Ip,port);
//调用Socket的发送方法,发送数据包
ds.send(dp);
//关闭socaket
ds.close();
}
}
接收端
package it.cast;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class Demo_UdpRceive {
public static void main(String[] args) throws IOException {
//建立指定端口的socket对象
DatagramSocket ds = new DatagramSocket(8824);
//创建数组 接收数据
byte[] bytes = new byte[1024];
//建立数据报包
DatagramPacket dp = new DatagramPacket(bytes,bytes.length);
//调用Socket的接收
ds.receive(dp);
//解析数据
//获取地址对象
InetAddress address = dp.getAddress();
//获取地址ip
String hostAddress = address.getHostAddress();
//获取值
byte[] data = dp.getData();
//获取长度
int length = dp.getLength();
//解析后的数据
String rcevive = new String(data,0,length);
System.out.println("从"+hostAddress+"接收到的数据是:"+rcevive);
//关闭socaket
ds.close();
}
}
2.TCP网络编程操作
完成步骤:
建立客户端和服务器端。
建立连接后,通过Socket中的IO流(Socket流)进行数据的传输。
(如果是服务器端,则需要添加一步操作:通过Socket服务获取Sokect再获取其当中的IO流)
关闭socket。
同样,客户端与服务器端是两个独立的应用程序。
注意:
服务器端开启后等待客户端访问,不应关闭。
一个服务器端对应多个客户端。
不同客户端间通信可以通过服务器端中转信息。
发送端
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
public class tcp_kh {
public static void main(String[] args) throws IOException {
//新建socaket对象
Socket s = new Socket("192.168.137.141",60345);
//获取socaket输出流
OutputStream out = s.getOutputStream();
//准备数据
String st = "我会打dota";
byte[] bytes = st.getBytes();
//输出数据
out.write(bytes);
s.close();
}
}
输入端:
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class tcpserver {
public static void main(String[] args) throws IOException {
//确定端口的服务端socket
ServerSocket ss = new ServerSocket(6663);
//获取socket
Socket socket = ss.accept();
//获取输入流
InputStream in = socket.getInputStream();
//输入数据
int len;
byte[] bytes = new byte[1024];
while((len= in.read(bytes))!=-1){
System.out.println(new String(bytes,0,len));
}
//关闭流
socket.close();
}
}