1、文件上传
编写一个客户端向服务端上传文件的程序,要求使用TCP通信的的知识,完成将本地机器输入的路径下的文件上传到D盘中名称为upload的文件夹中。并把客户端的IP地址加上count标识作为上传后文件的文件名,即IP(count)的形式。其中,count随着文件的增多而增大,例如127.0.0.(1).jpg、127.0.0.(2).jpg。
2、模拟微信聊天
将多线程与UDP通信相关知识结合,模拟实现微信聊天小程序。通过监听指定的端口号、目标IP地址和目标端口号,实现消息的发送和接收功能,并显示聊天的内容。
package ou;
import java.io.*;
import java.net.Socket;
public class TCPclient1 {
public static final String clientfilepath = "D:\\IMG_20221119_152830.jpg.jpg";
public static void main(String[] args) throws IOException {
// 创建客户端Socket对象
Socket socket = new Socket("127.0.0.1",8888);
OutputStream outputStream=socket.getOutputStream();
InputStream inputStream=new FileInputStream(clientfilepath);//输入流读取图片
byte[] buffer=new byte[1024];
int len=0;
while((len=inputStream.read(buffer))!=-1)
{
outputStream.write(buffer,0,len);//向服务端输送
}
outputStream.close();
inputStream.close();
socket.close();
}
}
package ou;
import java.io.*;
import java.net.*;
public class TCPserver1 {
public static final String serverfilepath = "D:\\IMG_20221119_152830.jpg.jpg";
public static void main(String[] args) throws IOException {
// 创建服务器Socket对象
ServerSocket serverSocket = new ServerSocket(8888);
System.out.println("服务端已经启动!");
// 监听客户端连接
System.out.println("等待接客户端请求...");
Socket socket = serverSocket.accept();
InputStream inputStream=socket.getInputStream();
//接受到的文件输送到目标文件夹
OutputStream outputStream=new FileOutputStream(serverfilepath);
byte[] buffer=new byte[1024];
int len=0;
System.out.println("服务端正在向本地磁盘写入...");
while((len=inputStream.read(buffer))!=-1)
{
outputStream.write(buffer,0,len);
}
System.out.println("服务端文件写入完成!");
outputStream.close();
inputStream.close();
serverSocket.close();
}
}
package ou;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;
public class UDPclient {
public static final String localhost = "127.0.0.1";
public static final String Port = "4025";
public static final String Weixin = "4000";
public static void main(String[] args) throws Exception {
DatagramSocket datagramSocket = new DatagramSocket();
System.out.println("微信客户端启动成功!");
System.out.print("请输入你的微信号:");
Scanner sc1 = new Scanner(System.in);
String str1 = sc1.next();
System.out.print("请输入要发送的端口号:");
Scanner sc2 = new Scanner(System.in);
String str2 = sc2.next();
System.out.println("微信聊天系统已经启动!请开始发消息:");
Scanner scanner = new Scanner(System.in);
while(true){
String str = scanner.next();
byte[] bytes = str.getBytes();
DatagramPacket datagramPacket = new DatagramPacket(
bytes,
bytes.length,
InetAddress.getByName(localhost),
Integer.parseInt(Port));
datagramSocket.send(datagramPacket);
System.out.print(str + "-----数据已经发送");
}
}
}
package ou;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class UDPserver {
public static void main(String[] args) throws Exception {
DatagramSocket socket = new DatagramSocket(8888);
System.out.println("微信服务端已经启动!");
byte[] bytes = new byte[20];
DatagramPacket datagramPacket = new DatagramPacket(
bytes,
bytes.length);
System.out.println("等待接收数据...");
while(true){
socket.receive(datagramPacket);
int len = datagramPacket.getLength();
String rs = new String(bytes,0,len);
System.out.println("收到了:来自"+ InetAddress.getLocalHost()+"的消息:"+rs);
}
}
}