百度空间 | 百度首页 
 
查看文章
 
C#.net同步异步SOCKET通讯和多线程总结(4)
2007-12-14 09:59

套接字类型:

TCP/IP的socket

Sock_stream可靠的面对连接数据传输,无差错、无重复发送,安照顺序发送接收,内设流量控制,避免数据流超限,数据为字节流,无长度限制,ftp流套接字。

Sock_DGRAM 无连接的服务,数据包以独立包的形式发送,不提供无措保证,数据可能丢失重复,发送接收的顺序混乱,网络文件系统nfs使用数据报式套接字。

Sock_Ram 接口允许较底层协议,IP,ICMP直接访问,检查新的协议实现或访问现有服务中配置的新设备。

服务端:

using System.Net;

using System.Net.Sockets;

using System.Text;

using System.Threading;

Thread mythread ;

Socket socket;

// 清理所有正在使用的资源。

         protected override void Dispose( bool disposing )

          {

               try

              {

             socket.Close();//释放资源

             mythread.Abort ( ) ;//中止线程

              }

              catch{ }

              if( disposing )

               {

                    if (components != null)

                    {

                        components.Dispose();

                    }

               }

               base.Dispose( disposing );

          }        

          public static IPAddress GetServerIP()

          {

               IPHostEntry ieh=Dns.GetHostByName(Dns.GetHostName());

               return ieh.AddressList[0];

          }

          private void BeginListen()

          {

               IPAddress ServerIp=GetServerIP();

               IPEndPoint iep=new IPEndPoint(ServerIp,8000);

               socket=new

                        Socket(AddressFamily.Inte.Network,SocketType.Stream,ProtocolType.Tcp);

               byte[] byteMessage=new byte[100];  

               this.label1.Text=iep.ToString();

               socket.Bind(iep);  

//             do

               while(true)

               {

                    try

                    {

                        socket.Listen(5);

                        Socket newSocket=socket.Accept();

                        newSocket.Receive(byteMessage);

                        string sTime = DateTime.Now.ToShortTimeString ( ) ;

string msg=sTime+":"+"Message from:";

msg+=newSocket.RemoteEndPoint.ToString()+Encoding.Default.GetString(byteMessage);

                        this.listBox1.Items.Add(msg);

                    }

                    catch(SocketException ex)

                    {

                        this.label1.Text+=ex.ToString();

                    }

               }

//             while(byteMessage!=null);

          }

          //开始监听

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

          {

               try

               {

                    mythread = new Thread(new ThreadStart(BeginListen));

                    mythread.Start();

               }

               catch(System.Exception er)

               {

                    MessageBox.Show(er.Message,"完成",MessageBoxButtons.OK,MessageBoxIcon.Stop);

               }

          }

客户端:

using System.Net;

using System.Net.Sockets;

using System.Text;

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

          {

               BeginSend();       

          }

          private void BeginSend()

          {             

               string ip=this.txtip.Text;

               string port=this.txtport.Text;

               IPAddress serverIp=IPAddress.Parse(ip);            

               int serverPort=Convert.ToInt32(port);

               IPEndPoint iep=new IPEndPoint(serverIp,serverPort);  

               byte[] byteMessage;  

//             do

//             {

                    Socket socket=new Socket(AddressFamily.Inte.Network,SocketType.Stream,ProtocolType.Tcp);

                    socket.Connect(iep);

                    byteMessage=Encoding.ASCII.GetBytes(textBox1.Text);

                    socket.Send(byteMessage);

                    socket.Shutdown(SocketShutdown.Both);

                    socket.Close();

//             }

//             while(byteMessage!=null);

          }


类别:技巧 | | 分享到i贴吧 | 浏览() | 评论 (0)
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2010 Baidu