package com.study.socket;
import javax.sound.sampled.Port;
import java.io.IOException;
import java.net.*;
/**
* UDP Client客服端
*/
public class UDPClient {
public static void main(String[] args) throws IOException {
//1.定义消息 服务端ip地址 端口号
String msg = "用户名:sw;密码:123456";
InetAddress address = InetAddress.getByName("DESKTOP-VQBUTGQ");
int port = 8000;
//2.创建数据报
byte[] data = msg.getBytes();
DatagramPacket packet = new DatagramPacket(data, data.length, address , port );
//3.创建socket
DatagramSocket socket = new DatagramSocket();
//4.发送消息
socket.send(packet);
//5.接收反馈信息
byte[] data1 = new byte[1024];
DatagramPacket packet1 = new DatagramPacket(data1 , 0 , data1.length);
socket.receive(packet1);
String rt = new String(data1,0,packet1.getLength());
System.out.println("这是客户端,服务端反馈信息为: " + rt);
//5.释放资源
socket.close();
}
}package com.study.socket;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
/**
* UDP 服务器端
*/
public class UDPServer {
public static void main(String[] args) {
try {
//1.建立socket并制定端口号
DatagramSocket socket = new DatagramSocket(8000);
int num = 0;
while (true){
UDPServerThread thread = new UDPServerThread(socket);
thread.setPriority(4);
thread.run();
num++;
System.out.println("服务器端接受了 " + num + " 个客户端请求!");
}
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}package com.study.socket;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
/**
* UDP server 多线程实现
*/
public class UDPServerThread extends Thread{
DatagramSocket socket = null;
public UDPServerThread(DatagramSocket socket){
this.socket = socket;
}
@Override
public void run() {
try {
byte[] data = new byte[1024];
DatagramPacket packet = new DatagramPacket(data,data.length);
//3.接收客户端发送的数据信息
socket.receive(packet);//此方法在接收到数据报之前一直阻塞
//4.读取数据报信息
String msg = new String(data,0,packet.getLength());
System.out.println("UDP server服务器接收到的信息: " + msg);
//5.反馈信息
String rt = "欢迎您!";
byte[] data1 = rt.getBytes();
InetAddress address = packet.getAddress();
int port = packet.getPort();
DatagramPacket packet1 = new DatagramPacket(data1, data1.length , address , port );
socket.send(packet1);
} catch (IOException e) {
e.printStackTrace();
}
}
}
package com.study.socket;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
/**
* socket编程模拟客服端
*/
public class Client {
public static void main(String[] args) {
//1.创建客户端socket
Socket socket = null;
try {
socket = new Socket("127.0.0.1",8888);
//2.获取输出流
OutputStreamWriter osw = new OutputStreamWriter(socket.getOutputStream());
PrintWriter pw = new PrintWriter(osw);
pw.write("用户名:polly;密码:809");
pw.flush();
//4.释放资源
pw.close();
osw.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}package com.study.socket;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
/**
* socket编程模拟服务器端
*/
public class Server {
public static void main(String[] args) {
try {
//1.建立服务端socket
ServerSocket serverSocket = new ServerSocket(8888);
int num = 0;
while(true){
//2.监听端口
Socket socket = serverSocket.accept();
ServerThread st = new ServerThread(socket);
st.setPriority(4);//设置线程的优先级,范围是【1,10】 默认是5
st.start();
num++;
System.out.println("服务器端接受 " + num + " 个客户端请求!");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}package com.study.socket;
import java.io.*;
import java.net.Socket;
/**
* 服务器线程实现
*/
public class ServerThread extends Thread {
Socket socket = null;
public ServerThread(Socket socket){
this.socket = socket;
}
@Override
public void run() {
if(socket != null){
//读取输入流
InputStream is = null;
InputStreamReader isr = null;
BufferedReader br = null;
OutputStreamWriter osw = null;
PrintWriter pw = null;
try {
is = socket.getInputStream();
isr = new InputStreamReader(is);
br = new BufferedReader(isr);
System.out.println("服务器读取客户端信息:" + socket.getLocalAddress() + " : " +
socket.getLocalPort() + " " + br.readLine());
//返回响应流
osw = new OutputStreamWriter(socket.getOutputStream());
pw = new PrintWriter(osw);
pw.write("请求已接到!");
pw.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
//关闭资源
try {
if(pw != null) pw.close();
if(osw != null) osw.close();
if(br != null) br.close();
if(isr != null) isr.close();
if(is != null) is.close();
if(socket != null) socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
startClient
多线程Server
上传文件的业务分析