day25

TCP网络程序

1.[服务端]启动创建serversocket对象,等待连接。
2.[客户端]启动创建socket对象,请求连接。
3.[服务端]接收连接调用accept方法,并返回一个socket对象。
4.[客户端]socket对象获取outputstream向服务端写出数据。
5.[服务端]socket对象获取inputstream,读取客户端发送的数据。
到处客户端向服务端发送数据成功。

自此,服务端向客户端写数据。
6.[服务端]Socket对象 ,获取outputstream,向客户端回写数据。
7.[客户端]Socket对象获取inputstream解析回写数据。
8.[客户端]释放资源,断开连接。

客户端

客户端基本思路:

1.创建Socket实例,设置端口和IP地址等

2.通过Socket实例,获取到流对象

3.通过流对象,向其中输入数据 ,并且在完成后实现关闭流。

服务端

服务器模型构建:

1.创建一个ServerSocket对象,进行端口监听。

2.while(true)重复监听

3.通过端口监听对象 获取Socket实例 并且获取到网络流

4.输出网络流数据 并且关闭流

(注意事情:端口监听一次 获取监听对象多次 低级流和高级流的关闭顺序)

程序代码及运行结果

package demo01FileUpload;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

/*
 *实现步骤:
 *1.创建一个本地字节收入流FileInputStream对象构造方法中绑定读取的数据源
 *2.二创建一个socket对象构造方法中绑定服务器的IP地址和端口号
 *3.使用socket中的方法,getOutputStream获取网络字节输出流
 *4.使用本地字节输入流中的read方法,读取本地文件
 *5.使用网络输出流中的write方法,把读取到的文件上传到服务器
 *6.使用socket中方法获取输入流对象
 *7.通过网络输入流对象中的read反复读取回写数据
 *8.释放资源
 * */
public class TcpClient {
	public static void main(String[] args) throws IOException {
		FileInputStream fis=new FileInputStream("D:\\xiaojava\\3.jpg");
		Socket socket=new Socket("127.0.0.1",6666);
		OutputStream  os=socket.getOutputStream();
		int len=0;
		byte[] bytes=new byte[1024];
		while((len=fis.read(bytes))!=-1) {
			os.write(bytes,0,len);
		}
		//告诉服务器,文件已经发送完毕
		socket.shutdownInput();
		InputStream  is=socket.getInputStream();
		while((len=is.read(bytes))!=-1) {
			System.out.println(new String(bytes,0,len));
			
		}
		fis.close();
		socket.close();
	}

}
package demo01FileUpload;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Random;

public class TcpServer {
	public static void main(String[] args) throws IOException {
		//1.创建一个服务器的serversocket对象
		ServerSocket server=new ServerSocket(6666);
		//2.等待客户端连接
		Socket socket=server.accept();
		//3.获取输入流
		InputStream is=socket.getInputStream();
		//
		File file=new File("D:\\xiaojava\\2021");
		if(!file.exists()) {
			file.mkdirs();
		}
		String FileName="classFive"+System.currentTimeMillis()+new Random().nextInt(99999)+".bmp";
		FileOutputStream fos=new FileOutputStream(file+"\\1.jpg");
		int len=0;
		byte[] bytes=new byte[1024];
		while((len=is.read(bytes))!=-1) {
		    fos.write(bytes,0,len);
		}
		socket.getOutputStream().write("图片上传成功".getBytes());
		fos.close();
		socket.close();
		server.close();
	}

}
package demo02FileUpload;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

/*
 *实现步骤:
 *1.创建一个本地字节收入流FileInputStream对象构造方法中绑定读取的数据源
 *2.二创建一个socket对象构造方法中绑定服务器的IP地址和端口号
 *3.使用socket中的方法,getOutputStream获取网络字节输出流
 *4.使用本地字节输入流中的read方法,读取本地文件
 *5.使用网络输出流中的write方法,把读取到的文件上传到服务器
 *6.使用socket中方法获取输入流对象
 *7.通过网络输入流对象中的read反复读取回写数据
 *8.释放资源
 * */
public class TcpClient {
	public static void main(String[] args) throws IOException {
		FileInputStream fis=new FileInputStream("D:\\xiaojava\\3.jpg");
		Socket socket=new Socket("127.0.0.1",6666);
		OutputStream  os=socket.getOutputStream();
		int len=0;
		byte[] bytes=new byte[1024];
		while((len=fis.read(bytes))!=-1) {
			os.write(bytes,0,len);
		}
		//告诉服务器,文件已经发送完毕
		socket.shutdownInput();
		InputStream  is=socket.getInputStream();
		while((len=is.read(bytes))!=-1) {
			System.out.println(new String(bytes,0,len));
			
		}
		fis.close();
		socket.close();
	}

}

package demo02FileUpload;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Random;

public class TcpServer {
	public static void main(String[] args) throws IOException {
		//1.创建一个服务器的serversocket对象
		ServerSocket server=new ServerSocket(6666);
		while(true) {
			Socket socket=server.accept();
			new Thread(new Runnable() {
				public void run() {
					try {//3.获取输入流
						InputStream is=socket.getInputStream();
						//4.准备数据存放位置
						File file=new File("D:\\xiaojava\\2021");
						if(!file.exists()) {
							file.mkdirs();
						}
						String FileName="classFive"+System.currentTimeMillis()+new Random().nextInt(99999)+".bmp";
						FileOutputStream fos=new FileOutputStream(file+"\\jpg");
						int len=0;
						byte[] bytes=new byte[1024];
						while((len=is.read(bytes))!=-1) {
						    fos.write(bytes,0,len);
						}
						socket.getOutputStream().write("图片上传成功".getBytes());
						fos.close();
						socket.close();
						server.close();
			}catch(IOException e) {
				System.out.println(e);
			}
				}
			}).start();
		}
	}
}
package Demo03Bs;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Random;

public class TcpServer {
	public static void main(String[] args) throws IOException {
		//1.创建一个服务器的serversocket对象
		ServerSocket server=new ServerSocket(9111);
		while(true) {
			Socket socket=server.accept();
			new Thread(new Runnable() {
				public void run() {
					try {//3.获取输入流
						InputStream is=socket.getInputStream();
						//4.准备数据存放位置
						File file=new File("D:\\xiaojava\\2021");
						if(!file.exists()) {
							file.mkdirs();
						}
						String FileName="classFive"+System.currentTimeMillis()+new Random().nextInt(99999)+".bmp";
						FileOutputStream fos=new FileOutputStream(file+"\\1.bmp");
						int len=0;
						byte[] bytes=new byte[1024];
						while((len=is.read(bytes))!=-1) {
						    fos.write(bytes,0,len);
						}
						socket.getOutputStream().write("图片上传成功".getBytes());
						fos.close();
						socket.close();
						server.close();
			}catch(IOException e) {
				System.out.println(e);
			}
				}
			}).start();
		}
	}
}
package Demo03Bs;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class TcpServerThread {
	public static void main(String[] args) throws IOException {
		ServerSocket server=new ServerSocket(9876);
		Socket socket=server.accept();
		InputStream  is=socket.getInputStream();
		byte[] bytes=new byte[1024];
		int len=0;
		BufferedReader br=new BufferedReader(new InputStreamReader(is));
		String line =br.readLine();
		System.out.println(line);
		String[] arr=line.split(" ");
		String htmlpath=arr[1];
		FileInputStream fis=new FileInputStream(System.getProperty("user.dir")+htmlpath);
		OutputStream  os=socket.getOutputStream();
		os.write("HTTP/1.1 200 OK\r\n".getBytes());
		os.write("Content-Type:text/html\r\n".getBytes());
		//必须要写入空行,否则浏览器不解析
		os.write("\r\n".getBytes());
		while((len=fis.read(bytes))!=-1) {
			os.write(bytes,0,len);
		}
		fis.close();
		socket.close();
		server.close();
	}
}

在这里插入图片描述
在这里插入图片描述

大数据2005周敏2020080605048

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值