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();
}
}