java,一台机器同时是客户端和服务器,服务器接收客户端信息并显示

java,一台机器同时是客户端和服务器,服务器接收客户端信息并显示,第1张

假设你有a、b两台计算机,那么a可以向b发送文件,b也可以向a发送文件。所以在实现的时候,你的软件既要实现服务器的功能,也要实现客户端的功能。即:你的软件既可以申请发送文件,也可以在别人向你发送文件时接收文件。实现也不难,只是你判断用户需要的功能,然后根据功能实现相应的操作就行了。

android客户端代码:

public class MainActivity extends Activity

{

private TextView uploadInfo

@Override

protected void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState)

setContentView(R.layout.activity_main)

uploadInfo = (TextView) findViewById(R.id.upload_info)

uploadFile()

}

public void uploadFile()

{

//服务器端地址

String url = "http://192.168.0.108:8080/UploadFileServer/upload"

//手机端要上传的文件,首先要保存你手机上存在该文件

String filePath = Environment.getExternalStorageDirectory()

+ "/1/power.apk"

AsyncHttpClient httpClient = new AsyncHttpClient()

RequestParams param = new RequestParams()

try

{

param.put("file", new File(filePath))

param.put("content", "liucanwen")

httpClient.post(url, param, new AsyncHttpResponseHandler()

{

@Override

public void onStart()

{

super.onStart()

uploadInfo.setText("正在上传...")

}

@Override

public void onSuccess(String arg0)

{

super.onSuccess(arg0)

Log.i("ck", "success>" + arg0)

if(arg0.equals("success"))

{

Toast.makeText(MainActivity.this, "上传成功!", 1000).show()

}

uploadInfo.setText(arg0)

}

@Override

public void onFailure(Throwable arg0, String arg1)

{

super.onFailure(arg0, arg1)

uploadInfo.setText("上传失败!")

}

})

} catch (FileNotFoundException e)

{

e.printStackTrace()

Toast.makeText(MainActivity.this, "上传文件不存在!", 1000).show()

}

}

}

服务器端代码:

public class UploadFileServlet extends HttpServlet

{

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException

{

response.setContentType("text/html")

PrintWriter out = response.getWriter()

// 创建文件项目工厂对象

DiskFileItemFactory factory = new DiskFileItemFactory()

// 设置文件上传路径

String upload = this.getServletContext().getRealPath("/upload/")

// 获取系统默认的临时文件保存路径,该路径为Tomcat根目录下的temp文件夹

String temp = System.getProperty("java.io.tmpdir")

// 设置缓冲区大小为 5M

factory.setSizeThreshold(1024 * 1024 * 5)

// 设置临时文件夹为temp

factory.setRepository(new File(temp))

// 用工厂实例化上传组件,ServletFileUpload 用来解析文件上传请求

ServletFileUpload servletFileUpload = new ServletFileUpload(factory)

// 解析结果放在List中

try

{

List<FileItem>list = servletFileUpload.parseRequest(request)

for (FileItem item : list)

{

String name = item.getFieldName()

InputStream is = item.getInputStream()

if (name.contains("content"))

{

System.out.println(inputStream2String(is))

} else if(name.contains("file"))

{

try

{

inputStream2File(is, upload + "\\" + item.getName())

} catch (Exception e)

{

e.printStackTrace()

}

}

}

out.write("success")

} catch (FileUploadException e)

{

e.printStackTrace()

out.write("failure")

}

out.flush()

out.close()

}

// 流转化成字符串

public static String inputStream2String(InputStream is) throws IOException

{

ByteArrayOutputStream baos = new ByteArrayOutputStream()

int i = -1

while ((i = is.read()) != -1)

{

baos.write(i)

}

return baos.toString()

}

// 流转化成文件

public static void inputStream2File(InputStream is, String savePath)

throws Exception

{

System.out.println("文件保存路径为:" + savePath)

File file = new File(savePath)

InputStream inputSteam = is

BufferedInputStream fis = new BufferedInputStream(inputSteam)

FileOutputStream fos = new FileOutputStream(file)

int f

while ((f = fis.read()) != -1)

{

fos.write(f)

}

fos.flush()

fos.close()

fis.close()

inputSteam.close()

}

}

1.通知客户端传递utf-8编码。2.服务器Response时设置Encoding编码格式(res.setContentType("application/jsoncharset=utf-8"))


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/218378.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-06
下一篇2023-04-06

发表评论

登录后才能评论

评论列表(0条)

    保存