‘壹’ java中如何实现从客户端发送文件到服务器端
服务器端源码:x0dx0aimport java.io.BufferedReader;x0dx0aimport java.io.File;x0dx0aimport java.io.FileNotFoundException;x0dx0aimport java.io.FileOutputStream;x0dx0aimport java.io.IOException;x0dx0aimport java.io.InputStream;x0dx0aimport java.io.InputStreamReader;x0dx0aimport java.net.ServerSocket;x0dx0aimport java.net.Socket;x0dx0ax0dx0a/**x0dx0a *x0dx0a * 文件名:ServerReceive.javax0dx0a * 实现功能:作为服务器接收客户端发送的文件x0dx0a *x0dx0a * 具体实现过程:x0dx0a * 1、建立SocketServer,等待客户端的连接x0dx0a * 2、当有客户端连接的时候,按照双方的约定,这时要读取一行数据x0dx0a * 其中保存客户端要发送的文件名和文件大小信息x0dx0a * 3、根据文件名在本地创建文件,并建立好流通信x0dx0a * 4、循环接收数据包,将数据包写入文件x0dx0a * 5、当接收数据的长度等于提前文件发过来的文件长度,即表示文件接收完毕,关闭文件x0dx0a * 6、文件接收工作结束x0dx0ax0dx0apublic class ServerReceive {x0dx0a x0dx0a public static void main(String[] args) {x0dx0a x0dx0a /**与服务器建立连接的通信句柄*/x0dx0a ServerSocket ss = null;x0dx0a Socket s = null;x0dx0a x0dx0a /**定义用于在接收后在本地创建的文件对象和文件输出流对象*/x0dx0a File file = null;x0dx0a FileOutputStream fos = null;x0dx0a x0dx0a /**定义输入流,使用socket的inputStream对数据包进行输入*/x0dx0a InputStream is = null;x0dx0a x0dx0a /**定义byte数组来作为数据包的存储数据包*/x0dx0a byte[] buffer = new byte[4096 * 5];x0dx0a x0dx0a /**用来接收文件发送请求的字符串*/x0dx0a String comm = null;x0dx0ax0dx0a/**建立socekt通信,等待服务器进行连接*/x0dx0a try {x0dx0a ss = new ServerSocket(4004);x0dx0a s = ss.accept();x0dx0a } catch (IOException e) {x0dx0a e.printStackTrace();x0dx0a }x0dx0ax0dx0a/**读取一行客户端发送过来的约定信息*/x0dx0a try {x0dx0a InputStreamReader isr = new InputStreamReader(s.getInputStream());x0dx0a BufferedReader br = new BufferedReader(isr);x0dx0a comm = br.readLine();x0dx0a } catch (IOException e) {x0dx0a System.out.println("服务器与客户端断开连接");x0dx0a }x0dx0a x0dx0a /**开始解析客户端发送过来的请求命令*/x0dx0a int index = comm.indexOf("/#");x0dx0a x0dx0a /**判断协议是否为发送文件的协议*/x0dx0a String xieyi = comm.substring(0, index);x0dx0a if(!xieyi.equals("111")){x0dx0a System.out.println("服务器收到的协议码不正确");x0dx0a return;x0dx0a }x0dx0a x0dx0a /**解析出文件的名字和大小*/x0dx0a comm = comm.substring(index + 2);x0dx0a index = comm.indexOf("/#");x0dx0a String filename = comm.substring(0, index).trim();x0dx0a String filesize = comm.substring(index + 2).trim();x0dx0ax0dx0a/**创建空文件,用来进行接收文件*/x0dx0a file = new File(filename);x0dx0a if(!file.exists()){x0dx0a try {x0dx0a file.createNewFile();x0dx0a } catch (IOException e) {x0dx0a System.out.println("服务器端创建文件失败");x0dx0a }x0dx0a }else{x0dx0a /**在此也可以询问是否覆盖*/x0dx0a System.out.println("本路径已存在相同文件,进行覆盖");x0dx0a }x0dx0a x0dx0a /**【以上就是客户端代码中写到的服务器的准备部分】*/x0dx0ax0dx0a/**x0dx0a * 服务器接收文件的关键代码*/x0dx0a try {x0dx0a /**将文件包装到文件输出流对象中*/x0dx0a fos = new FileOutputStream(file);x0dx0a long file_size = Long.parseLong(filesize);x0dx0a is = s.getInputStream();x0dx0a /**size为每次接收数据包的长度*/x0dx0a int size = 0;x0dx0a /**count用来记录已接收到文件的长度*/x0dx0a long count = 0;x0dx0a x0dx0a /**使用while循环接收数据包*/x0dx0a while(count < file_size){x0dx0a /**从输入流中读取一个数据包*/x0dx0a size = is.read(buffer);x0dx0a x0dx0a /**将刚刚读取的数据包写到本地文件中去*/x0dx0a fos.write(buffer, 0, size);x0dx0a fos.flush();x0dx0a x0dx0a /**将已接收到文件的长度+size*/x0dx0a count += size;x0dx0a System.out.println("服务器端接收到数据包,大小为" + size);x0dx0a }x0dx0a x0dx0a } catch (FileNotFoundException e) {x0dx0a System.out.println("服务器写文件失败");x0dx0a } catch (IOException e) {x0dx0a System.out.println("服务器:客户端断开连接");x0dx0a }finally{x0dx0a /**x0dx0a * 将打开的文件关闭x0dx0a * 如有需要,也可以在此关闭socket连接x0dx0a * */x0dx0a try {x0dx0a if(fos != null)x0dx0a fos.close();x0dx0a } catch (IOException e) {x0dx0a e.printStackTrace();x0dx0a }//catch (IOException e)x0dx0a }//finallyx0dx0a x0dx0a }//public static void main(String[] args)x0dx0a}//public class ServerReceivex0dx0ax0dx0a客户端源码:x0dx0ax0dx0aimport java.io.File;x0dx0aimport java.io.FileInputStream;x0dx0aimport java.io.FileNotFoundException;x0dx0aimport java.io.IOException;x0dx0aimport java.io.OutputStream;x0dx0aimport java.io.PrintStream;x0dx0aimport java.net.Socket;x0dx0ax0dx0a/**x0dx0a *x0dx0a * 文件名:ClientSend.javax0dx0a * 实现功能:作为客户端向服务器发送一个文件x0dx0a *x0dx0a * 具体实现过程:x0dx0a * 1、建立与服务器端的连接,IP:127.0.0.1, port:4004x0dx0a * 2、将文件的名字和大小通过自定义的文件传输协议,发送到服务器x0dx0a * 3、循环读取本地文件,将文件打包发送到数据输出流中x0dx0a * 4、关闭文件,结束传输x0dx0a *x0dx0a * */x0dx0a x0dx0apublic class ClientSend {x0dx0a x0dx0a public static void main(String[] args) {x0dx0a x0dx0a /**与服务器建立连接的通信句柄*/x0dx0a Socket s = null;x0dx0a x0dx0a /**定义文件对象,即为要发送的文件x0dx0a * 如果使用绝对路径,不要忘记使用'/'和'\'的区别x0dx0a * 具体区别,请读者自行查询x0dx0a * */x0dx0a File sendfile = new File("API.CHM");x0dx0a /**定义文件输入流,用来打开、读取即将要发送的文件*/x0dx0a FileInputStream fis = null;x0dx0a /**定义byte数组来作为数据包的存储数据包*/x0dx0a byte[] buffer = new byte[4096 * 5];x0dx0a x0dx0a /**定义输出流,使用socket的outputStream对数据包进行输出*/x0dx0a OutputStream os = null;x0dx0ax0dx0a/**检查要发送的文件是否存在*/x0dx0a if(!sendfile.exists()){x0dx0a System.out.println("客户端:要发送的文件不存在");x0dx0a return;x0dx0a }x0dx0ax0dx0a/**与服务器建立连接*/x0dx0a try {x0dx0a s = new Socket("127.0.0.1", 4004);x0dx0a }catch (IOException e) {x0dx0a System.out.println("未连接到服务器");x0dx0a }x0dx0a x0dx0a /**用文件对象初始化fis对象x0dx0a * 以便于可以提取出文件的大小x0dx0a * */x0dx0a try {x0dx0a fis = new FileInputStream(sendfile);x0dx0a } catch (FileNotFoundException e1) {x0dx0a e1.printStackTrace();x0dx0a }x0dx0ax0dx0a/**首先先向服务器发送关于文件的信息,以便于服务器进行接收的相关准备工作x0dx0a * 具体的准备工作,请查看服务器代码。x0dx0a *x0dx0a * 发送的内容包括:发送文件协议码(此处为111)/#文件名(带后缀名)/#文件大小x0dx0a * */x0dx0a try {x0dx0a PrintStream ps = new PrintStream(s.getOutputStream());x0dx0a ps.println("111/#" + sendfile.getName() + "/#" + fis.available());x0dx0a ps.flush();x0dx0a } catch (IOException e) {x0dx0a System.out.println("服务器连接中断");x0dx0a }x0dx0ax0dx0a/**x0dx0a * 此处睡眠2s,等待服务器把相关的工作准备好x0dx0a * 也是为了保证网络的延迟x0dx0a * 读者可自行选择添加此代码x0dx0a * */x0dx0a try {x0dx0a Thread.sleep(2000);x0dx0a } catch (InterruptedException e1) {x0dx0a e1.printStackTrace();x0dx0a }x0dx0ax0dx0a/**之前的准备工作结束之后x0dx0a * 下面就是文件传输的关键代码x0dx0a * */x0dx0a try {x0dx0a x0dx0a /**获取socket的OutputStream,以便向其中写入数据包*/x0dx0a os = s.getOutputStream();x0dx0a x0dx0a /** size 用来记录每次读取文件的大小*/x0dx0a int size = 0;x0dx0a x0dx0a /**使用while循环读取文件,直到文件读取结束*/x0dx0a while((size = fis.read(buffer)) != -1){x0dx0a System.out.println("客户端发送数据包,大小为" + size);x0dx0a /**向输出流中写入刚刚读到的数据包*/x0dx0a os.write(buffer, 0, size);x0dx0a /**刷新一下*/x0dx0a os.flush();x0dx0a }x0dx0a } catch (FileNotFoundException e) {x0dx0a System.out.println("客户端读取文件出错");x0dx0a } catch (IOException e) {x0dx0a System.out.println("客户端输出文件出错");x0dx0a }finally{x0dx0a x0dx0a /**x0dx0a * 将打开的文件关闭x0dx0a * 如有需要,也可以在此关闭socket连接x0dx0a * */x0dx0a try {x0dx0a if(fis != null)x0dx0a fis.close();x0dx0a } catch (IOException e) {x0dx0a System.out.println("客户端文件关闭出错");x0dx0a }//catch (IOException e)x0dx0a }//finallyx0dx0a x0dx0a }//public static void main(String[] args)x0dx0a}//public class ClientSend
‘贰’ java swing 登陆界面做好之后要在服务器端进行验证 怎么将页面上输入的数值得到发送至服务器呢
你好,你可以直接把你的输入的值存到request域中,通过get或者post请求发送至服务器。你可以试试,希望能帮到你。
还有,你到底是打算传到main方法中还是传到服务器那端啊?能说明白吗?
‘叁’ java客户端如何向服务器txt文件写入信息
客户端要向服务器txt文件写入信息,必须得调用服务器端得java方法,io读写txt文件。客户端用异步调用效果更好,客户端异步传递要写入得信息到服务器上,由服务器上得方法执行写入
‘肆’ java中如何实现从客户端发送文件到服务器端
服务器端源码:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
/**
*
* 文件名:ServerReceive.java
* 实现功能:作为服务器接收客户端发送的文件
*
* 具体实现过程:
* 1、建立SocketServer,等待客户端的连接
* 2、当有客户端连接的时候,按照双方的约定,这时要读取一行数据
* 其中保存客户端要发送的文件名和文件大小信息
* 3、根据文件名在本地创建文件,并建立好流通信
* 4、循环接收数据包,将数据包写入文件
* 5、当接收数据的长度等于提前文件发过来的文件长度,即表示文件接收完毕,关闭文件
* 6、文件接收工作结束
public class ServerReceive {
public static void main(String[] args) {
/**与服务器建立连接的通信句柄*/
ServerSocket ss = null;
Socket s = null;
/**定义用于在接收后在本地创建的文件对象和文件输出流对象*/
File file = null;
FileOutputStream fos = null;
/**定义输入流,使用socket的inputStream对数据包进行输入*/
InputStream is = null;
/**定义byte数组来作为数据包的存储数据包*/
byte[] buffer = new byte[4096 * 5];
/**用来接收文件发送请求的字符串*/
String comm = null;
/**建立socekt通信,等待服务器进行连接*/
try {
ss = new ServerSocket(4004);
s = ss.accept();
} catch (IOException e) {
e.printStackTrace();
}
/**读取一行客户端发送过来的约定信息*/
try {
InputStreamReader isr = new InputStreamReader(s.getInputStream());
BufferedReader br = new BufferedReader(isr);
comm = br.readLine();
} catch (IOException e) {
System.out.println("服务器与客户端断开连接");
}
/**开始解析客户端发送过来的请求命令*/
int index = comm.indexOf("/#");
/**判断协议是否为发送文件的协议*/
String xieyi = comm.substring(0, index);
if(!xieyi.equals("111")){
System.out.println("服务器收到的协议码不正确");
return;
}
/**解析出文件的名字和大小*/
comm = comm.substring(index + 2);
index = comm.indexOf("/#");
String filename = comm.substring(0, index).trim();
String filesize = comm.substring(index + 2).trim();
/**创建空文件,用来进行接收文件*/
file = new File(filename);
if(!file.exists()){
try {
file.createNewFile();
} catch (IOException e) {
System.out.println("服务器端创建文件失败");
}
}else{
/**在此也可以询问是否覆盖*/
System.out.println("本路径已存在相同文件,进行覆盖");
}
/**【以上就是客户端代码中写到的服务器的准备部分】*/
/**
* 服务器接收文件的关键代码*/
try {
/**将文件包装到文件输出流对象中*/
fos = new FileOutputStream(file);
long file_size = Long.parseLong(filesize);
is = s.getInputStream();
/**size为每次接收数据包的长度*/
int size = 0;
/**count用来记录已接收到文件的长度*/
long count = 0;
/**使用while循环接收数据包*/
while(count < file_size){
/**从输入流中读取一个数据包*/
size = is.read(buffer);
/**将刚刚读取的数据包写到本地文件中去*/
fos.write(buffer, 0, size);
fos.flush();
/**将已接收到文件的长度+size*/
count += size;
System.out.println("服务器端接收到数据包,大小为" + size);
}
} catch (FileNotFoundException e) {
System.out.println("服务器写文件失败");
} catch (IOException e) {
System.out.println("服务器:客户端断开连接");
}finally{
/**
* 将打开的文件关闭
* 如有需要,也可以在此关闭socket连接
* */
try {
if(fos != null)
fos.close();
} catch (IOException e) {
e.printStackTrace();
}//catch (IOException e)
}//finally
}//public static void main(String[] args)
}//public class ServerReceive
客户端源码:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.Socket;
/**
*
* 文件名:ClientSend.java
* 实现功能:作为客户端向服务器发送一个文件
*
* 具体实现过程:
* 1、建立与服务器端的连接,IP:127.0.0.1, port:4004
* 2、将文件的名字和大小通过自定义的文件传输协议,发送到服务器
* 3、循环读取本地文件,将文件打包发送到数据输出流中
* 4、关闭文件,结束传输
*
* */
public class ClientSend {
public static void main(String[] args) {
/**与服务器建立连接的通信句柄*/
Socket s = null;
/**定义文件对象,即为要发送的文件
* 如果使用绝对路径,不要忘记使用'/'和'\'的区别
* 具体区别,请读者自行查询
* */
File sendfile = new File("API.CHM");
/**定义文件输入流,用来打开、读取即将要发送的文件*/
FileInputStream fis = null;
/**定义byte数组来作为数据包的存储数据包*/
byte[] buffer = new byte[4096 * 5];
/**定义输出流,使用socket的outputStream对数据包进行输出*/
OutputStream os = null;
/**检查要发送的文件是否存在*/
if(!sendfile.exists()){
System.out.println("客户端:要发送的文件不存在");
return;
}
/**与服务器建立连接*/
try {
s = new Socket("127.0.0.1", 4004);
}catch (IOException e) {
System.out.println("未连接到服务器");
}
/**用文件对象初始化fis对象
* 以便于可以提取出文件的大小
* */
try {
fis = new FileInputStream(sendfile);
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
/**首先先向服务器发送关于文件的信息,以便于服务器进行接收的相关准备工作
* 具体的准备工作,请查看服务器代码。
*
* 发送的内容包括:发送文件协议码(此处为111)/#文件名(带后缀名)/#文件大小
* */
try {
PrintStream ps = new PrintStream(s.getOutputStream());
ps.println("111/#" + sendfile.getName() + "/#" + fis.available());
ps.flush();
} catch (IOException e) {
System.out.println("服务器连接中断");
}
/**
* 此处睡眠2s,等待服务器把相关的工作准备好
* 也是为了保证网络的延迟
* 读者可自行选择添加此代码
* */
try {
Thread.sleep(2000);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
/**之前的准备工作结束之后
* 下面就是文件传输的关键代码
* */
try {
/**获取socket的OutputStream,以便向其中写入数据包*/
os = s.getOutputStream();
/** size 用来记录每次读取文件的大小*/
int size = 0;
/**使用while循环读取文件,直到文件读取结束*/
while((size = fis.read(buffer)) != -1){
System.out.println("客户端发送数据包,大小为" + size);
/**向输出流中写入刚刚读到的数据包*/
os.write(buffer, 0, size);
/**刷新一下*/
os.flush();
}
} catch (FileNotFoundException e) {
System.out.println("客户端读取文件出错");
} catch (IOException e) {
System.out.println("客户端输出文件出错");
}finally{
/**
* 将打开的文件关闭
* 如有需要,也可以在此关闭socket连接
* */
try {
if(fis != null)
fis.close();
} catch (IOException e) {
System.out.println("客户端文件关闭出错");
}//catch (IOException e)
}//finally
}//public static void main(String[] args)
}//public class ClientSend
‘伍’ 用java 写一个登陆的功能,输入账户和密码,发送给服务器端,这个消息怎么封装
都不知道你的服务器是web服务器 还是socket通讯服务器
如果是web服务器 那就如婉月工作室所说的 那么发送
如果是socket 服务器 那就在服务器上建立socket服务端
在登录机上建立socket 客户端
自定义通讯协议 比如 发送 login#admin#000111
服务端就可以识别为 是登录指令 用户名 admin 密码 000111
服务器访问数据库 得到结果 返回 login#1 或者 login#0 那客户端就知道验证是否成功了
这是最简单的规约