import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
/**
* 发送文件
* 创建客户端
* 1、使用服务器的地址和端口 使用Socket创建客户端
* 2、操作:输入输出流操作
* 3、释放资源
* @author java
*
*/
public class FileClient {
public static void main(String[] args) throws UnknownHostException, IOException {
System.out.println("-----Client----");
//1、使用服务器的地址和端口 使用Socket创建客户端
Socket client = new Socket("localhost",8888);
//2、操作:文件拷贝
InputStream is = new BufferedInputStream(new FileInputStream("src/modelVersion.docx"));
OutputStream os = new BufferedOutputStream(client.getOutputStream());
byte[] flush = new byte[1024];
int len = -1;
while((len=is.read(flush))!=-1){
os.write(flush,0,len);
}
//3、释放资源
os.close();
is.close();
client.close();
}
}
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 存储文件
* 1、指定端口 使用ServerSocket创建服务器
* 2、阻塞式等待连接accept
* 3、操作:输入输出流操作
* 4、释放资源
* @author java
*
*/
public class FileServer {
public static void main(String[] args) throws IOException {
System.out.println("------Server-----");
//1、指定端口 使用ServerSocket创建服务器
ServerSocket server = new ServerSocket(8888);
// 2、阻塞式等待连接accept
Socket client = server.accept();
System.out.println("一个客户端已经建立了连接!!!");
// 3、操作:拷贝文件
InputStream is = new BufferedInputStream(client.getInputStream());
OutputStream os = new BufferedOutputStream(new FileOutputStream("src/filedocx.docx"));
byte[] flush = new byte[1024];
int len=-1;
while((len=is.read(flush))!=-1){
os.write(flush,0,len);
}
// 4、释放资源
os.close();
is.close();
client.close();
}
}
客户端
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
/**
* 创建客户端
* 1、使用服务器的地址和端口 使用Socket创建客户端
* 2、操作:输入输出流操作
* 3、释放资源
* @author java
*
*/
public class Client {
public static void main(String[] args) throws UnknownHostException, IOException {
System.out.println("-----Client----");
//1、使用服务器的地址和端口 使用Socket创建客户端
Socket client = new Socket("localhost",8888);
//2、操作:输入输出流操作
DataOutputStream dos = new DataOutputStream(client.getOutputStream());
String data = "编程很有趣!!!";
dos.writeUTF(data);
dos.flush();
//3、释放资源
dos.close();
client.close();
}
}
服务端
import java.io.DataInputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
/**
*
* 1、指定端口 使用ServerSocket创建服务器
* 2、阻塞式等待连接accept
* 3、操作:输入输出流操作
* 4、释放资源
* @author java
*
*/
public class Server {
public static void main(String[] args) throws IOException {
System.out.println("------Server-----");
//1、指定端口 使用ServerSocket创建服务器
ServerSocket server = new ServerSocket(8888);
// 2、阻塞式等待连接accept
Socket client = server.accept();
System.out.println("一个客户端已经建立了连接!!!");
// 3、操作:输入输出流操作
DataInputStream dis = new DataInputStream(client.getInputStream());
String data = dis.readUTF();
System.out.println("data:"+data);
// 4、释放资源
dis.close();
client.close();
}
}
模拟用户登陆:单向(客户端)
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.UnknownHostException;
/**
* 模拟用户登陆:单向
* 创建客户端
* 1、使用服务器的地址和端口 使用Socket创建客户端
* 2、操作:输入输出流操作
* 3、释放资源
* @author java
*
*/
public class LoginClient {
public static void main(String[] args) throws UnknownHostException, IOException {
System.out.println("-----Client----");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("请输入用户名:");
String uname = br.readLine();
System.out.println("请输入密码:");
String upwd = br.readLine();
//1、使用服务器的地址和端口 使用Socket创建客户端
Socket client = new Socket("localhost",8888);
//2、操作:输入输出流操作
DataOutputStream dos = new DataOutputStream(client.getOutputStream());
dos.writeUTF("uname="+uname +"&"+"upwd="+ upwd);
dos.flush();
//3、释放资源
dos.close();
client.close();
}
}
模拟用户登陆:单向(服务端)
import java.io.DataInputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 模拟用户登陆:单向
* 1、指定端口 使用ServerSocket创建服务器
* 2、阻塞式等待连接accept
* 3、操作:输入输出流操作
* 4、释放资源
* @author java
*
*/
public class LoginServer {
public static void main(String[] args) throws IOException {
System.out.println("------Server-----");
//1、指定端口 使用ServerSocket创建服务器
ServerSocket server = new ServerSocket(8888);
// 2、阻塞式等待连接accept
Socket client = server.accept();
System.out.println("一个客户端已经建立了连接!!!");
// 3、操作:输入输出流操作
DataInputStream dis = new DataInputStream(client.getInputStream());
String datas = dis.readUTF();
System.out.println("datas:"+datas);
String[] dataArray = datas.split("&");
for(String data : dataArray){
String[] dataInfo = data.split("=");
if(dataInfo[0].equals("uname")){
System.out.println("输入的用户名为:"+dataInfo[1]);
}else if(dataInfo[0].equals("upwd")){
System.out.println("输入的密码为:"+dataInfo[1]);
}
}
// 4、释放资源
dis.close();
client.close();
}
}
模拟用户登陆:双向(客户端)
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.UnknownHostException;
/**
* 模拟用户登陆:双向
* 创建客户端
* 1、使用服务器的地址和端口 使用Socket创建客户端
* 2、操作:输入输出流操作
* 3、释放资源
* @author java
*
*/
public class LoginTwoWayClient {
public static void main(String[] args) throws UnknownHostException, IOException {
System.out.println("-----Client----");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("请输入用户名:");
String uname = br.readLine();
System.out.println("请输入密码:");
String upwd = br.readLine();
//1、使用服务器的地址和端口 使用Socket创建客户端
Socket client = new Socket("localhost",8888);
//2、操作:输入输出流操作
DataOutputStream dos = new DataOutputStream(client.getOutputStream());
dos.writeUTF("uname="+uname +"&"+"upwd="+ upwd);
dos.flush();
//输入
DataInputStream dis = new DataInputStream(client.getInputStream());
String result = dis.readUTF();
System.out.println("结果:"+result);
//3、释放资源
dos.close();
client.close();
}
}
模拟用户登陆:双向(服务端)
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 模拟用户登陆:双向
* 1、指定端口 使用ServerSocket创建服务器
* 2、阻塞式等待连接accept
* 3、操作:输入输出流操作
* 4、释放资源
* @author java
*
*/
public class LoginTwoWayServer {
public static void main(String[] args) throws IOException {
System.out.println("------Server-----");
//1、指定端口 使用ServerSocket创建服务器
ServerSocket server = new ServerSocket(8888);
// 2、阻塞式等待连接accept
Socket client = server.accept();
System.out.println("一个客户端已经建立了连接!!!");
// 3、操作:输入输出流操作
DataInputStream dis = new DataInputStream(client.getInputStream());
String datas = dis.readUTF();
System.out.println("datas:"+datas);
String[] dataArray = datas.split("&");
String uname = "";
String upwd = "";
for(String data : dataArray){
String[] dataInfo = data.split("=");
if(dataInfo[0].equals("uname")){
System.out.println("输入的用户名为:"+dataInfo[1]);
uname = dataInfo[1];
}else if(dataInfo[0].equals("upwd")){
System.out.println("输入的密码为:"+dataInfo[1]);
upwd = dataInfo[1];
}
}
//输出
DataOutputStream dos = new DataOutputStream(client.getOutputStream());
if(uname.equals("张三")&&upwd.equals("123")){
dos.writeUTF("登陆成功!!!!");
}else{
dos.writeUTF("用户名或密码错误!!!");
}
dos.flush();
// 4、释放资源
dis.close();
client.close();
}
}
模拟多个用户登陆:双向
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 模拟多个用户登陆:双向
* 1、指定端口 使用ServerSocket创建服务器
* 2、阻塞式等待连接accept
* 3、操作:输入输出流操作
* 4、释放资源
* @author java
*
*/
public class LoginMultiServer {
public static void main(String[] args) throws IOException {
System.out.println("------Server-----");
//1、指定端口 使用ServerSocket创建服务器
ServerSocket server = new ServerSocket(8888);
// 2、阻塞式等待连接accept
boolean isRunning = true;
while(isRunning){
Socket client = server.accept();
System.out.println("一个客户端已经建立了连接!!!");
new Thread(new Channel(client)).start();
}
}
static class Channel implements Runnable{
private Socket client;
private DataInputStream dis;
private DataOutputStream dos;
public Channel(Socket client){
this.client = client;
try {
dis = new DataInputStream(client.getInputStream());
dos = new DataOutputStream(client.getOutputStream());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
release();
}
}
//接收数据
private String receive(){
String datas = "";
try {
datas = dis.readUTF();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return datas;
}
//发送数据
private void send(String msg){
try {
dos.writeUTF(msg);
dos.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//关闭资源
private void release(){
// 4、释放资源
try {
if(null != dos){
dos.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if(null != dos){
dis.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if(null != dos){
client.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void run() {
// 3、操作:输入输出流操作
String[] dataArray = receive().split("&");
String uname = "";
String upwd = "";
for(String data : dataArray){
String[] dataInfo = data.split("=");
if(dataInfo[0].equals("uname")){
System.out.println("输入的用户名为:"+dataInfo[1]);
uname = dataInfo[1];
}else if(dataInfo[0].equals("upwd")){
System.out.println("输入的密码为:"+dataInfo[1]);
upwd = dataInfo[1];
}
}
if(uname.equals("张三")&&upwd.equals("123")){
send("登陆成功!!!!");
}else{
send("用户名或密码错误!!!");
}
release();
}
}
}
模拟模拟多个用户登陆:双向
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.UnknownHostException;
/**
* 模拟模拟多个用户登陆:双向
* 创建客户端
* 1、使用服务器的地址和端口 使用Socket创建客户端
* 2、操作:输入输出流操作
* 3、释放资源
* @author java
*
*/
public class LoginMultiClient {
public static void main(String[] args) throws UnknownHostException, IOException {
System.out.println("-----Client----");
//1、使用服务器的地址和端口 使用Socket创建客户端
Socket client = new Socket("localhost",8888);
//2、操作:输入输出流操作
new Send(client).send();
//输入
new Receive(client).receive();
client.close();
}
static class Send{
private DataOutputStream dos;
private Socket client;
private BufferedReader br;
private String msg;
public Send(Socket client){
br= new BufferedReader(new InputStreamReader(System.in));
this.msg = init();
this.client = client;
try {
dos= new DataOutputStream(client.getOutputStream());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void send(){
try {
dos.writeUTF(msg);
dos.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public String init(){
System.out.println("请输入用户名:");
String uname = "";
String upwd = "";
String msg = "";
try {
uname = br.readLine();
System.out.println("请输入密码:");
upwd = br.readLine();
msg = "uname="+uname +"&"+"upwd="+ upwd;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return msg;
}
}
static class Receive{
private Socket client;
private DataInputStream dis;
public Receive(Socket client){
this.client = client;
try {
dis = new DataInputStream(client.getInputStream());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public String receive(){
String result = "";
try {
result = dis.readUTF();
System.out.println("结果:"+result);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
}
}