java做的socket服务端接收http请求,怎么接收不到内容?

wei0527 2006-06-29 02:31:56
各位,我客户端用 URLConnection向服务端发送数据,服务端我用socket来接收,怎么接收不到想要的数据?只能收到如下内容:

POST /a.lif HTTP/1.1

Content-type: text/xml

User-Agent: Java/1.4.1_02

Host: 127.0.0.1:10444

Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2

Connection: keep-alive

Content-Length: 9
...全文
1171 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
wei0527 2006-07-09
  • 打赏
  • 举报
回复
问题已经解决,谢谢各位的帮助。。。
wei0527 2006-07-06
  • 打赏
  • 举报
回复
没人说一下么。。。。?
wei0527 2006-07-04
  • 打赏
  • 举报
回复
但在c#中能接收到内容啊,哪位高人指点一下啊....
wei0527 2006-07-03
  • 打赏
  • 举报
回复
类似这样的代码,从文件中读空行没问题啊,怎么读取http请求就不行了呢。。。
while((str=in.readLine())!=null){
System.out.println(str);
}
wei0527 2006-07-03
  • 打赏
  • 举报
回复
to:maquan
我服务端程序改为下面的形式,可还是没收到啊。。。循环不停了。。。
服务端程序:
import java.io.*;
import java.net.*;

public class server extends Thread
{
private Socket s;
server(Socket s)
{
this.s=s;
}
public static void main(String[] args){

try
{
ServerSocket ss=new ServerSocket(10444);
System.out.println("监听10444开始。。。");
while(true)
{
Socket client=ss.accept();
server threads=new server(client);
threads.start();
}
}
catch(Exception ex){
System.out.println(ex);
}
}
public void run()
{
try{
BufferedReader in=new BufferedReader(new InputStreamReader(s.getInputStream()));
PrintWriter out=new PrintWriter(s.getOutputStream());

String str;
while((str=in.readLine())!=null){
System.out.println(str);

out.write("服务端正在接收...");
out.flush();
}

out.write("服务端接收完毕。。。");
out.flush();
System.out.println("接收完毕。。。");
in.close();
out.close();
s.close();

}
catch(Exception ex){
ex.printStackTrace();

}
}
}

maquan 2006-07-03
  • 打赏
  • 举报
回复
TCP 传输是没有“数据边界”的,你只能根据传输的内容来自己判定数据边界。

类似的代码,在读取文件的时候,总会遇到“文件结束”,所以,EOF 就是自然的数据边界。

从 socket 里读的时候,如果你也指望通过 EOF 得到数据边界,就只能在发送方关闭 socket,这样,在接收方的效果就是 EOF。但你这段程序, client 在发送一些数据后,还要等 server 返回一些内容,显然不能关闭 socket。如果硬要做,可以试试 socket.shutdownOutput()。

通过关闭 socket 来向对方表明数据边界,终究不是什么好办法。其实,我也被这个问题困扰。希望有经验的大侠能指教,有没有什么好一点的办法?
maquan 2006-07-02
  • 打赏
  • 举报
回复
你程序中下面这段有问题,在 HTTP request 的 Head 和 Body 之间,是有一个空行的。

if(str.length()==0)
{
break;
}
wei0527 2006-07-02
  • 打赏
  • 举报
回复
大家帮忙解决一下。。。
wts173 2006-07-01
  • 打赏
  • 举报
回复
up
wei0527 2006-06-30
  • 打赏
  • 举报
回复
哦,content-length:5,上面的我曾经改过,不好意思,^_^。
我的意思是,怎么发送的这个字符串,收不到呢,只能得到长度,怎么才能得到内容的?
DeadWolf 2006-06-29
  • 打赏
  • 举报
回复
不好意思确实少收了一点点
而且content-length怎么等与9了呢 <xml> 只有5 阿

不知道为什么
难道outStream.writeBytes(str); 进去的不是<xml>
DeadWolf 2006-06-29
  • 打赏
  • 举报
回复
收到的是对的阿
gogon 2006-06-29
  • 打赏
  • 举报
回复
mark
wei0527 2006-06-29
  • 打赏
  • 举报
回复
大家帮我解决一下啊。。。。
wei0527 2006-06-29
  • 打赏
  • 举报
回复
客户端程序:
import java.io.*;
import java.net.*;


public class client{
public static void main(String[] args){
try{
URL myurl=new URL("http://127.0.0.1:10444/a.lif");
HttpURLConnection myurlcon=(HttpURLConnection)myurl.openConnection();
myurlcon.setDoOutput(true);
myurlcon.setDoInput(true);
myurlcon.setDefaultUseCaches(false);
myurlcon.setUseCaches(false);
myurlcon.setRequestMethod("POST");

myurlcon.setRequestProperty("Content-type","text/xml");
String str="<xml>";
String strlength=new Integer(str.length()).toString();
myurlcon.setRequestProperty("Content-length",strlength);

myurlcon.connect();

DataOutputStream outStream = new DataOutputStream(myurlcon.getOutputStream());
outStream.writeBytes(str);
outStream.flush();
outStream.close();
BufferedReader in=new BufferedReader(new InputStreamReader(myurlcon.getInputStream()));

String strread;
while((strread=in.readLine())!=null){
System.out.println(strread);
}
in.close();
}
catch(Exception ex){
ex.printStackTrace();
}
}
}
treeroot 2006-06-29
  • 打赏
  • 举报
回复
up
wei0527 2006-06-29
  • 打赏
  • 举报
回复
服务端程序:
import java.io.*;
import java.net.*;

public class server extends Thread
{
private Socket s;
server(Socket s)
{
this.s=s;
}
public static void main(String[] args){

try
{
ServerSocket ss=new ServerSocket(10444);
System.out.println("监听10444开始。。。");
while(true)
{
Socket client=ss.accept();
server threads=new server(client);
threads.start();
}
}
catch(Exception ex){
System.out.println(ex);
}
}
public void run()
{
try{
BufferedReader in=new BufferedReader(new InputStreamReader(s.getInputStream()));
PrintWriter out=new PrintWriter(s.getOutputStream());


while(true){
String str=in.readLine();

System.out.println(str);

out.write("服务端正在接收...");
out.flush();
if(str.length()==0)
{

break;
}
}

out.write("服务端接收完毕。。。");
out.flush();
System.out.println("接收完毕。。。");
in.close();
out.close();
s.close();

}
catch(Exception ex){
ex.printStackTrace();

}
}
}

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧