| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1338 人关注过本帖, 1 人收藏
标题:关于Socket发送接收数据的问题
只看楼主 加入收藏
xudong
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2005-12-20
收藏(1)
 问题点数:0 回复次数:0 
关于Socket发送接收数据的问题

各位高手好:
  小妺想请教一个问题,如下程序段,向主机发送请求已成功执行,但执行到接收数据那步后程序处于阻塞状态,缓冲区内没有可读取的数据[bytes=socket.Receive(recvBytes,recvBytes.Length,0);]请问这是为什么;
还有如果使作 string sendStr = "GET / HTTP/1.1\r\nHost: " + hostName +
// "\r\nConnection: Close\r\n\r\n";
不用 string sendStr="This is apple";就可以正常读出数据,但读出的数据我不明白是什么,请问这句话是什么意思:string sendStr = "GET / HTTP/1.1\r\nHost: " + hostName +
// "\r\nConnection: Close\r\n\r\n"; 读出的数据见最后的附加文字。
  注:我是在C#中智能设备应用程序中Pocket Pc 2002模似器调试的。
  请各位在繁忙中指教一二,小妹不胜感激!
程序段:
private void button2_Click(object sender, System.EventArgs e)
{
// DialogResult result;
//取得预保存的文件名 (我写的是:My Documents\fkt.txt)
string fileName=textBox3.Text.Trim();
//远程主机
string hostName=textBox1.Text.Trim(); (我写的是我的主机名:ting)
//端口
int port=Int32.Parse(textBox2.Text.Trim()); (我写的是:80)
//得到主机信息
IPHostEntry ipInfo=Dns.GetHostByName(hostName);
//取得IPAddress[]
IPAddress[] ipAddr=ipInfo.AddressList;
//得到ip
IPAddress ip=ipAddr[0];
//组合出远程终结点
IPEndPoint hostEP=new IPEndPoint(ip,port);
//创建Socket 实例
Socket socket=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
try
{
//尝试连接
socket.Connect(hostEP);
}
catch(Exception se)
{
//MessageBox.Show("连接错误"+se.Message,"提示信息" ,MessageBoxButtons.RetryCancel);
MessageBox.Show ("连接错误"+se.Message ,"提示信息");
}
//发送给远程主机的请求内容串

// string sendStr = "GET / HTTP/1.1\r\nHost: " + hostName +
// "\r\nConnection: Close\r\n\r\n";
string sendStr="This is apple";
//创建bytes字节数组以转换发送串
byte[] bytesSendStr=new byte[13];
//将发送内容字符串转换成字节byte数组
bytesSendStr=Encoding.ASCII.GetBytes(sendStr);
try
{
//向主机发送请求
socket.Send(bytesSendStr,bytesSendStr.Length,0);
}
catch(Exception ce)
{
MessageBox.Show("发送错误:"+ce.Message,"提示信息 " );
}
//声明接收返回内容的字符串
string recvStr="";
//声明字节数组,一次接收数据的长度为1024字节
byte[] recvBytes=new byte[13];
//返回实际接收内容的字节数
int bytes=0;
//循环读取,直到接收完所有数据
while(true)
{
bytes=socket.Receive(recvBytes,recvBytes.Length,0); //执行到此步程序处于阻塞状态,            缓冲区内没有可读取的数据
//读取完成后退出循环
if(bytes<=0)
break;
//将读取的字节数转换为字符串
recvStr+=Encoding.ASCII.GetString(recvBytes,0,bytes);
}
//将所读取的字符串转换为字节数组
byte[] content=Encoding.ASCII.GetBytes(recvStr);
try
{
//创建文件流对象实例
FileStream fs=new FileStream(fileName,FileMode.OpenOrCreate,FileAccess.ReadWrite);
//写入文件
fs.Write(content,0,content.Length);
}

catch(Exception fe)
{
MessageBox.Show("文件创建/写入错误:"+fe.Message,"提示信息" );
}
//禁用Socket
socket.Shutdown(SocketShutdown.Both);
//关闭Socket
socket.Close();
}



附加文字:
HTTP/1.1 302 Object noved Server:Microsoft-IIS/5.0 Date:Tue,20 Dec 2005 07:30:11 GNT X-Powered-By:Asp.Net Connection:close Location:localstart.asp Content-Length:135 Content-Type:text/html Set –Cookie: ASPSESSIONIDQGQQQMWU=DMJBIJNDPC GBMFEKNMGPCKFD:apth=/Cache-control;private <head><title>Object moved</title></head><body><h1>Object Moved</h1>This object may be found <a HREF=”localstart.asp”>here</a>.</body>

搜索更多相关主题的帖子: Socket 数据 GET string 
2005-12-20 16:28
快速回复:关于Socket发送接收数据的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.032254 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved