首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

c# 套接字编程的一个很奇怪的有关问题

2011-12-28 
c# 套接字编程的一个很奇怪的问题在网上看了一个简单的例子,编译运行一切正常,但我在服务器端使用/*******

c# 套接字编程的一个很奇怪的问题
在网上看了一个简单的例子,编译运行一切正常,但我在服务器端使用

/*************************/
Socket   temp   =   s.Accept();//为新建连接创建新的Socket。
  Console.WriteLine( "remoteEndpoin   {0} ",temp.RemoteEndPoint.ToString());
/*************************/

输出客户端的ip地址和端口号时,ip地址是对的   127.0.0.1
但端口号却是个随机值   ,这是什么原因?

代码如下
/******************************************************************/
服务器端:


using   System;
using   System.Collections.Generic;
using   System.Text;

using   System.IO;
using   System.Net;
using   System.Net.Sockets;

namespace   socket
{
        class   serverApp
        {
                static   void   Main(string[]   args)
                {
                        try
                        {
                               
                                int   port   =   2000;
                                string   host   =   "127.0.0.1 ";
                                IPAddress   ip   =   IPAddress.Parse(host);
                                IPEndPoint   ipe   =   new   IPEndPoint(ip,   port);
                                Socket   s   =   new   Socket(AddressFamily.InterNetwork,   SocketType.Stream,   ProtocolType.Tcp);//创建一个Socket类
                                s.Bind(ipe);//绑定2000端口
                                s.Listen(0);//开始监听

                             

                                Console.WriteLine( "Wait   for   connect ");
                                Socket   temp   =   s.Accept();//为新建连接创建新的Socket。
                                Console.WriteLine( "remoteEndpoin   {0} ",temp.RemoteEndPoint.ToString());
                                Console.WriteLine( "Get   a   connect ");
                                string   recvStr   =   " ";
                                byte[]   recvBytes   =   new   byte[1024];


                                int   bytes;
                                bytes   =   temp.Receive(recvBytes,   recvBytes.Length,   0);//从客户端接受信息
                                recvStr   +=   Encoding.ASCII.GetString(recvBytes,   0,   bytes);
                                Console.WriteLine( "Server   Get   Message:{0} ",   recvStr);//把客户端传来的信息显示出来
                                string   sendStr   =   "Ok!Client   Send   Message   Sucessful! ";
                                byte[]   bs   =   Encoding.ASCII.GetBytes(sendStr);
                                temp.Send(bs,   bs.Length,   0);//返回客户端成功信息
                                temp.Close();
                                s.Close();
                        }
                        catch   (ArgumentNullException   e)
                        {
                                Console.WriteLine( "ArgumentNullException:   {0} ",   e);
                        }
                        catch   (SocketException   e)
                        {
                                Console.WriteLine( "SocketException:   {0} ",   e);
                        }
                        Console.WriteLine( "Press   Enter   to   Exit ");
                        Console.ReadLine();

                }
        }
}


/******************************************************************/
客户端
using   System;
using   System.Collections.Generic;
using   System.Text;

using   System.IO;
using   System.Net;
using   System.Net.Sockets;

namespace   client
{
        class   clientApp
        {
                static   void   Main(string[]   args)
                {


                        try
                        {
                               
                                int   port   =   2000;
                                string   host   =   "127.0.0.1 ";
                                IPAddress   ip   =   IPAddress.Parse(host);
                                IPEndPoint   ipe   =   new   IPEndPoint(ip,   port);//把ip和端口转化为IPEndPoint实例
                                Socket   c   =   new   Socket(AddressFamily.InterNetwork,   SocketType.Stream,   ProtocolType.Tcp);//创建一个Socket
                               

                           

                                Console.WriteLine( "Conneting... ");
                                c.Connect(ipe);//连接到服务器
                                string   sendStr   =   "hello!This   is   a   socket   test ";
                                byte[]   bs   =   Encoding.ASCII.GetBytes(sendStr);
                                Console.WriteLine( "Send   Message ");
                                c.Send(bs,   bs.Length,   0);//发送测试信息
                                string   recvStr   =   " ";
                                byte[]   recvBytes   =   new   byte[1024];
                                int   bytes;
                                bytes   =   c.Receive(recvBytes,   recvBytes.Length,   0);//从服务器端接受返回信息
                                recvStr   +=   Encoding.ASCII.GetString(recvBytes,   0,   bytes);
                                Console.WriteLine( "Client   Get   Message:{0} ",   recvStr);//显示服务器返回信息
                                c.Close();


                        }
                        catch   (ArgumentNullException   e)
                        {
                                Console.WriteLine( "ArgumentNullException:   {0} ",   e);
                        }
                        catch   (SocketException   e)
                        {
                                Console.WriteLine( "SocketException:   {0} ",   e);
                        }
                        Console.WriteLine( "Press   Enter   to   Exit ");
                        Console.ReadLine();

                }
        }
}




[解决办法]
客户端的端口号本来就是随机的!

热点排行