TCP传输练习题
最简单的tcp传输demo
客户端:
public class TCPTransferClient {
public static void main(String[] args) throws IOException, IOException {
Socket s=new Socket("192.168.174.1",10086);
OutputStream out =s.getOutputStream();
out.write("tcp传输演示---客户端:你好,我来了".getBytes());
s.close();
}
}
服务端:
public class TCPTransferServer {
public static void main(String[] args) throws IOException {
ServerSocket ss=new ServerSocket(10086);
//获取客户端socket
Socket s =ss.accept();
InputStream in=s.getInputStream();
byte[] buf=new byte[1024];
int len = in.read(buf);
String str=new String(buf,0,len);
System.out.println(s.getInetAddress().getHostAddress()+"\t"+"客户端输出:"+str);
ss.close();
}
}
需求一:客户端输入字母发送给服务端,服务端收到后显示在控制台上,并将数据转成大写返回给客户端,直到客户端输入over,转换结束
客户端:
public class TestTextTransClient {
/**
* 思路:
* 1、创建socket客户端对象 2、获取键盘录入
* 3、通过socket获取输出流,将录入的信息发送给socket输出流
* 4、通过socket获取输入流,获取服务端的响应信息
*/
public static void main(String[] args) throws IOException {
//1、创建客户端对象
Socket s= new Socket("192.168.174.1",10086);
//2、获取键盘录入
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
//3、socket输出流
PrintWriter out = new PrintWriter(s.getOutputStream(),true);
//4、获取服务器端返回的大写数据
BufferedReader readerByServer = new BufferedReader(new InputStreamReader(s.getInputStream()));
String line=null;
while((line=bufferedReader.readLine()) != null){
if("over".equals(line)){
break;
}
out.println(line);
//读取服务端发回的一行大写数据
String str=readerByServer.readLine();
System.out.println(str);
}
s.close();
}
}
服务端:
public class TestTextTransServer {
/**
* 服务端思路
* 1、创建服务端服务对象serverSocket
* 2、获取客户端socket对象
* 3、通过客户端对象,读取客户端发送的数据
* 4、将数据大写输出到控制台上
* @throws IOException
*/
public static void main(String[] args) throws IOException {
ServerSocket s = new ServerSocket(10086);
Socket ss = s.accept();
String ip=ss.getInetAddress().getHostAddress();
System.out.println(ip+"..........connected");
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(ss.getInputStream()));
PrintWriter out = new PrintWriter(ss.getOutputStream(),true);
String line = null;
while((line=bufferedReader.readLine())!=null){
System.out.println("读取到客户端数据是:"+line);
out.println("将客户端数据转成大写为:"+line.toUpperCase());
}
ss.close();
s.close();
}
}
需求二: 上传文件
客户端:
public class TestUploadTextClient {
public static void main(String[] args) throws IOException, IOException {
System.out.println("客户端上传文件........");
String path="D:"+File.separator+"list.txt";
File file = new File(path);
Socket socket = new Socket("192.168.174.1",10023);
BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
PrintWriter out = new PrintWriter(socket.getOutputStream(),true);
String line = null;
while((line=bufferedReader.readLine())!=null){
out.println(line);
}
//告诉服务端,客户端已将文件写完了
socket.shutdownOutput();
//得到服务端的回应
BufferedReader bufReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String response = bufReader.readLine();
System.out.println("服务端回复:"+response);
bufferedReader.close();
socket.close();
}
}
服务端:
public class TestUploadTextServer {
public static void main(String[] args) throws IOException {
System.out.println("请选择要上传的文件到服务端。。。。。。。。。。。");
ServerSocket ss = new ServerSocket(10023);
Socket s = ss.accept();
System.out.println(s.getInetAddress().getHostAddress()+"......connected");
BufferedReader bufr = new BufferedReader(new InputStreamReader(s.getInputStream()));
String path="e:"+File.separator+"server.txt";
BufferedWriter bufw = new BufferedWriter(new FileWriter(new File(path)));
String line = null;
while((line=bufr.readLine())!=null){
bufw.write(line);
bufw.newLine();
bufw.flush();
}
//回应客户端读写完成情况
PrintWriter out = new PrintWriter(s.getOutputStream(),true);
//必须加换行true,要么数据无法自动刷新到socket流中,客户端读取不到数据,阻塞
out.println("上传成功");
//必须是println方法,要么客户端readline方法接收不到换行标记,会堵塞
//不是所有的流都需要关闭
bufw.close();
ss.close();
}
}
需求三:上传图片
跟上传文件的思路一致
客户端:
public class TestUploadPicClient {
public static void main(String[] args) throws IOException, IOException {
System.out.println("开启客户端,开始上传图片");
Socket s = new Socket("192.168.174.1",10088);
String picPath="d:"+File.separator+"DSCF4505A.jpg";
BufferedInputStream bufin=new BufferedInputStream(new FileInputStream(new File(picPath)));
BufferedOutputStream bufout = new BufferedOutputStream(s.getOutputStream());
int len=0;
while((len=bufin.read())!=-1){
bufout.write(len);
}
s.shutdownOutput();
InputStream in = s.getInputStream();
byte[] buf = new byte[1024];
int lens=in.read(buf);
String text =new String(buf,0,lens);
System.out.println(text);
bufin.close();
s.close();
}
}
服务端:
public class TestUploadPicServer {
public static void main(String[] args) throws IOException {
System.out.println("服务端已启动,请选择上的图片");
ServerSocket ss=new ServerSocket(10088);
Socket s =ss.accept();
String ip=s.getInetAddress().getHostAddress();
System.out.println(ip+"...........connected");
InputStream in=s.getInputStream();
String picPath="d:"+File.separator+"123";
File dir = new File(picPath);
if(!dir.exists()){
dir.mkdirs();
}
File file = new File(dir,ip+".jpg");
FileOutputStream fos=new FileOutputStream(file);
byte[] buf = new byte[1024];
int len=0;
while((len=in.read(buf))!=-1){
fos.write(buf, 0, len);
}
//回应客户端上传情况
OutputStream out = s.getOutputStream();
out.write("上传成功".getBytes());
fos.close();
ss.close();
}
}