public SocketClient()
        {
            Active = false;
            socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        }
        public bool Connect(string serverIP, int serverPort)
        {
            IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse(serverIP), serverPort);
            try
            {
                socket.Connect(endPoint);
                receiveThread = new Thread(new ThreadStart(ReceiveProc));
                receiveThread.Start(); //开始接收数据线程
            }
            catch (Exception)
            {}
            Active = socket.Connected;
            return Active;
        }
这个代码里有错吗??
为什么我socket.Connect(endPoint);后Connected属性是true的。
实际上 我那个端口都没开的我用netstat -an 也看过了的 是没开的
就是会成功 怎么回事呢? 哪里错了。

解决方案 »

  1.   

    IPEndPoint endpoint = new IPEndPoint(address, port);            
              tempSocket = 
                new Socket(endpoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
    http://msdn.microsoft.com/zh-cn/library/system.net.ipendpoint(VS.80).aspx
      

  2.   

    IPAddress.Parse(serverIP), 这个也没错啊。。
    参数
    ipString
    类型:System..::.String包含 IP 地址(IPv4 使用以点分隔的四部分表示法,IPv6 使用冒号十六进制表示法)的字符串。 返回值
    类型:System.Net..::.IPAddress一个 IPAddress 实例。MSDN上说的。。完全按照要求的啊。
      

  3.   

    lz
    你这是客户端,
    当服务端打开监听后,客户端连接服务端端口,并产生一个新的socket,port为任意未被占用的端口,
      

  4.   

    恩,我就是要写客户端啊。
    IP,PORT是服务端的地址 和 监听的端口 呀
    难道不是这样连吗?
      

  5.   

    (1,连接)客户端只要连接服务端端口,不需要打开端口监听,
    (2,传输数据)服务端与客户端生成另一个socket,并各开一个端口(不是原port)监听,对话
      

  6.   

    我是在客户端判断的。。
    通过connect后的connected判断。。
      

  7.   

    我看了下MSDN。。connected判断是不可靠的。。我按照MSDN上的代码写了个判断。。竟然执行是错误。。
    // .Connect throws an exception if unsuccessful
    client.Connect(anEndPoint);// This is how you can determine whether a socket is still connected.
    bool blockingState = client.Blocking;
    try
    {
        byte [] tmp = new byte[1];    client.Blocking = false;
        client.Send(tmp, 0, 0);//我执行的时候这里出错。好象需要异步什么的。
        Console.WriteLine("Connected!");
    }
    catch (SocketException e) 
    {
        // 10035 == WSAEWOULDBLOCK
        if (e.NativeErrorCode.Equals(10035))
            Console.WriteLine("Still Connected, but the Send would block");
        else
        {
            Console.WriteLine("Disconnected: error code {0}!", e.NativeErrorCode);
        }
    }
    finally
    {
        client.Blocking = blockingState;
    } Console.WriteLine("Connected: {0}", client.Connected);
    把上面client.Blocking = true;就可以了。
    难道MSDN会错,我想这不大可能,所以该是我错了。。
    请指点下。。
      

  8.   

    1.为什么我socket.Connect(endPoint);后Connected属性是true的?
    如果你socket.Connect(endPoint)成功后,Connected的属性当然是true了2.实际上 我那个端口都没开的我用netstat -an 也看过了的 是没开的
    就是会成功 怎么回事呢? 哪里错了。
    如果你查看的"端口"是endPoint的端口,那是服务器端的端口号,你客户端应该是没有开的了,客户端是随机生成的一个端口号连接endPoint的MSDN上的代码写了个判断。。竟然执行错误 I don't konwn.
      

  9.   

    所以netstat -an 看的就是服务端的。。