UDP通信,多发多收
客户端代码:
//客户端代码
package network;
import java.net.*;
import java.util.Scanner;
public class Client {
public static void main(String[] args) throws Exception{
//创建Client对象
DatagramSocket socket = new DatagramSocket(); //括号内可以指定端口号,不指定则默认为随机端口
//将要发送的字符串数据转换成字节流
Scanner sc = new Scanner(System.in);
while(true){
String temp = sc.nextLine();
byte[] bytes = temp.getBytes();
if (temp.equals("exit")){
System.out.println("-----EXIT SUCCESSFULLY!-----");
break;
}
//创建packet对象,参数依次为:1.要发送的数据,2.发送数据的大小,3.Server的IP地址,4.Server端程序的端口。
DatagramPacket packet = new DatagramPacket(bytes,bytes.length, InetAddress.getLocalHost(),6666);
//发送packet
socket.send(packet);
System.out.println("Client had sent packet over!");
}
//释放资源
socket.close();
}
}
服务端代码:
//服务端代码
package network;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class Server {
public static void main(String[] args) throws Exception {
//创建服务端对象
DatagramSocket socket = new DatagramSocket(6666);
System.out.println("-----Server had started-----");
while(true){
//创建数据包对象
byte[] buffer = new byte[1024 * 64];
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
//等待接收数据
socket.receive(packet);
int len = packet.getLength();
String rs = new String(buffer,0,len); //转换字节流数据为字符
System.out.println(rs);
System.out.println(packet.getAddress().getHostAddress());
System.out.println(packet.getPort());
System.out.println("----------------------------");
}
}
}
TCP通信
客户端代码
//客户端
package TCP_demo;
import java.io.DataOutputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;
public class Client {
public static void main(String[] args) throws Exception {
//创建Socket对象,并同时请求与服务端程序进行连接
Socket socket = new Socket("127.0.0.1",8888);
//从socket通信管道中得到一个字节输出流,用来发数据给服务端程序
OutputStream os = socket.getOutputStream();
//把低级的字节输出流包装成数据输出流
DataOutputStream dos = new DataOutputStream(os);
Scanner sc = new Scanner(System.in);
while(true){
//写入字符数据
String temp = sc.nextLine();
if (temp.equals("exit")){
break;
}
dos.writeUTF(temp);
dos.flush();
}
dos.close();
//释放连接资源
socket.close();
}
}
服务端代码
//服务端代码
package TCP_demo;
import java.io.DataInputStream;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) throws Exception{
//创建Serversocket对象,同时为服务端注册端口
ServerSocket serversocket = new ServerSocket(8888);
System.out.println("-------服务端已启动-------");
//调用accept方法,阻塞等待客户端的连接请求,返回socket通信管道对象
Socket socket = serversocket.accept();
//从socket通信管道中得到一个字节输入流
InputStream is = socket.getInputStream();
//将原始的字节输入流包装成数据输入流
DataInputStream dis = new DataInputStream(is);
while(true){
//读取字符数据
try{
String rs = dis.readUTF();
System.out.println(rs);
}catch (Exception e){
System.out.println(socket.getRemoteSocketAddress()+"离线了.");
dis.close();
socket.close();
break;
}
//获取客户端的IP地址
System.out.println(socket.getRemoteSocketAddress());
}
}
}