C#Socket通讯(三)

//回复答应添加好友 
                    if (_str.StartsWith("Find::AddFriendYes")) 
                    { 
                        
string UserName = _str.Substring("Find::AddFriendYes".Length, _str.Length - "Find::AddFriendYes".Length); 
                      
//// 保存数据 
                        DataTable TabmyFriend = new DataTable() ; 
                        
//保存该用户 
                        TabmyFriend.ReadXml(MyPath + "\\UserFriend\\" + obj as string + ".xml"); 
                        DataRow newRow 
= TabmyFriend.NewRow(); 
                        newRow[
"UserName"= UserName; 
                        TabmyFriend.Rows.Add(newRow); 
                        TabmyFriend.WriteXml(MyPath 
+ "\\UserFriend\\" + obj as string + ".xml", XmlWriteMode.WriteSchema, false); 
                        
//保存其好友 
                        TabmyFriend = new DataTable(); 
                        TabmyFriend.ReadXml(MyPath 
+ "\\UserFriend\\" + UserName + ".xml"); 
                        DataRow newRow1 
= TabmyFriend.NewRow(); 
                        newRow1[
"UserName"= obj as string
                        TabmyFriend.Rows.Add(newRow1); 
                        TabmyFriend.WriteXml(MyPath 
+ "\\UserFriend\\" + UserName + ".xml", XmlWriteMode.WriteSchema, false); 
                        TabmyFriend 
= null
                        SerializeFriendList(obj, clientSkt);

//"开始"按钮事件 

private void button1_Click(object sender, System.EventArgs e) { 

   
//取得预保存的文件名 

   
string fileName=textBox3.Text.Trim(); 

   
//远程主机 

   
string hostName=textBox1.Text.Trim(); 

   
//端口 

   
int port=Int32.Parse(textBox2.Text.Trim()); 

   
//得到主机信息 

   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,MessageBoxIcon.Information); 



//发送给远程主机的请求内容串 

string sendStr="GET / HTTP/1.1\r\nHost: " + hostName + 

"\r\nConnection: Close\r\n\r\n"

   
//创建bytes字节数组以转换发送串 

   
byte[] bytesSendStr=new byte[1024]; 

   
//将发送内容字符串转换成字节byte数组 

   bytesSendStr
=Encoding.ASCII.GetBytes(sendStr); 

try 



//向主机发送请求 

socket.Send(bytesSendStr,bytesSendStr.Length,
0); 



catch(Exception ce) 

   { 

   MessageBox.Show(
"发送错误:"+ce.Message,"提示信息 

   ,MessageBoxButtons.RetryCancel,MessageBoxIcon.Information); 

   } 

   
//声明接收返回内容的字符串 

   
string recvStr=""

   
//声明字节数组,一次接收数据的长度为1024字节 

   
byte[] recvBytes=new byte[1024]; 

   
//返回实际接收内容的字节数 

   
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,"提示信息",MessageBoxButtons.RetryCancel,MessageBoxIcon.Information); 

   } 

   
//禁用Socket 

   socket.Shutdown(SocketShutdown.Both); 

   
//关闭Socket 

   socket.Close(); 

   } 

   } 

posted @ 2009-07-30 11:18  fxair  阅读(258)  评论(0)    收藏  举报