永发信息网

socket模拟Http协议上传数据到服务器

答案:2  悬赏:40  手机版
解决时间 2021-04-24 13:57
RT,谁能给一个具体例子(包括客户端:负责发送数据,服务器端:负责接收数据),用Java来写。先谢了~~!!
最佳答案
客户端:
package ServerPackage;
import java.io.*;
import java.net.*;

public class ClientTwo {
private Socket sk=null;
private BufferedReader buf=null;
private BufferedReader tobuf=null;
private PrintWriter pw=null;

public ClientTwo(){
try {
sk=new Socket(InetAddress.getLocalHost(),4444);
System.out.println("客户连接成功!");
buf=new BufferedReader(new InputStreamReader(sk.getInputStream()));
tobuf=new BufferedReader(new InputStreamReader(System.in));
pw=new PrintWriter(sk.getOutputStream(),true);
} catch (Exception e) {
e.printStackTrace();
}
}
public void Talk(){
try {
String stg=tobuf.readLine(); //获取从控制台输入的路径
pw.println(stg);
String content=buf.readLine();
while(content!=null){
System.out.println(content);
content=buf.readLine();
}
pw.close();
tobuf.close();
buf.close();
sk.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new ClientTwo().Talk();
}

}
服务器端:
package ServerPackage;
import java.io.*;
import java.net.*;

public class ServerTwo {
private ServerSocket ss=null;
private Socket sk=null;
private BufferedReader buf=null;
private BufferedReader tobuf=null;
private PrintWriter pw=null;
public ServerTwo(){
try {
ss=new ServerSocket(4444);
System.out.println("服务器等待客户的连接....");
sk=ss.accept();
System.out.println("有客户已连接");
buf=new BufferedReader(new InputStreamReader(sk.getInputStream()));
pw=new PrintWriter(sk.getOutputStream(),true);
} catch (Exception e) {
e.printStackTrace();
}
}
public void Send(){
try {
String stg=buf.readLine();
File fe=new File(stg);
if(fe.exists()){
System.out.println("开始发送.......");
tobuf=new BufferedReader(new FileReader(fe));
String str=tobuf.readLine();
while(str!=null){
pw.println(str);
str=tobuf.readLine();
}
System.out.println("发送完毕......");
tobuf.close();
pw.close();
sk.close();
ss.close();
}else{
pw.println("没有你想要的内容!");
}
} catch (Exception e) {

e.printStackTrace();
}
}
public static void main(String[] args) {
new ServerTwo().Send();

}

}
你试试吧。。。。。。。

全部回答

楼上你这是http协议吗?

我抄录一段别人的代码,希望对你有帮助:

private final void __sendRequest(String requestBody, Socket socket) throws IOException { StringBuffer url = new StringBuffer(); StringBuffer connection = new StringBuffer(); if (__proxy == null) { url.append(__server.get("path")); connection.append("Connection: "); connection.append(__keepAlive ? "Keep-Alive" : "close"); connection.append("\r\n"); connection.append("Pragma: no-cache\r\n"); connection.append("Cache-Control: no-cache\r\n"); } else { url.append(__server.get("scheme")); url.append("://"); url.append(__server.get("host")); url.append(":"); url.append(__server.get("port")); url.append(__server.get("path")); connection.append("Proxy-Connection: "); connection.append(__keepAlive ? "Keep-Alive" : "close"); connection.append("\r\n"); if (__proxy.get("userinfo") != null) { connection.append("Proxy-Authorization: Basic "); connection.append(Base64.encode(((String) __proxy.get("userinfo")).getBytes(__charset))); connection.append("\r\n"); } } StringBuffer auth = new StringBuffer(); if (__server.get("userinfo") != null) { auth.append("Authorization: Basic "); auth.append(Base64.encode(((String) __server.get("userinfo")).getBytes(__charset))); auth.append("\r\n"); } StringBuffer cookie = new StringBuffer(); if (__cookie != null) { cookie.append("Cookie: "); cookie.append(__cookie); cookie.append("\r\n"); } byte[] rb = requestBody.getBytes(); StringBuffer requestHeader = new StringBuffer(); requestHeader.append("POST ").append(url).append(" HTTP/1.1\r\n"); requestHeader.append("Host: ").append(__server.get("host")).append(':').append(__server.get("port")).append("\r\n"); requestHeader.append("User-Agent: PHPRPC Client 3.0 for Java\r\n"); requestHeader.append(auth).append(connection).append(cookie); requestHeader.append("Accept: */*\r\n"); requestHeader.append("Accept-Encoding: gzip,deflate\r\n"); requestHeader.append("Content-Type: application/x-www-form-urlencoded; charset=").append(__charset).append("\r\n"); requestHeader.append("Content-Length: ").append(rb.length).append("\r\n"); requestHeader.append("\r\n"); __sendRequest(requestHeader.toString().getBytes(), rb, socket); }

private final void __sendRequest(byte[] header, byte[] body, Socket socket) throws IOException { BufferedOutputStream os = new BufferedOutputStream(socket.getOutputStream()); os.write(header); os.write(body); os.flush(); }

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
额。。。头疼
怎么查获得的荣誉徽章数量?
唐诗宋词远去的共同点与不同点,他们之间有什
女生买什么品牌电脑好,本人准大一女学生,想
幫忙翻譯一下邀請函(緊急)
谁的中间有英文
电脑按关机后桌面没有了 但是不关机 怎么办?
阿程酱鸭曦华源分店这个地址在什么地方,我要
幼儿园创城小标语,潍坊创城口号现在的
寻师傅 语言
dnf华四30粉短卢克西的紫炎短剑多少钱
足银和纯银有啥区别啊
人与人相处 应怎么来做好自己
泰戈尔写妈妈的诗歌,求泰戈尔的短篇诗歌
求24篇暑假日记(200字左右)
推荐资讯
怎样才能聊天
谁可以送QQ音速种子?送的加分丶
男的 为什么会吃醋啊...
关于距离英文的情话,表示距离近的谚语或名言
怎么退站队
修改密码时不知道问题的答案该怎么办
莱西市万家居养老服务中心在什么地方啊,我要
QQ旋舞11号结婚为什么没送点卷
骨折了能吃海鲜吗,骨折初期能吃海鲜吗
您在装扮时选择了付费物品,请先在下方购物车
十万个为什么是什么呀?
DNF为什么登陆一次退出后 要重启才能进入
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?