2011-07-28 164 views
0

我在C#中编写用于套接字通信的小程序。我这里还有我的代码: 客户端(数据发送方):套接字通信错误

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Net; 
using System.Net.Sockets; 

namespace Client 
{ 
class Program 
{ 
    static Socket sck; //vytvor socket 
    static void Main(string[] args) 
    { 
     sck = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 
     IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 1234); //nastav premennú loacalEndPoint na lokálnu ip a port 1234 
     try //Skús sa 
     { 
      sck.Connect(localEndPoint); // pripojiť 

     } 
     catch { //ak sa to nepodarí 
      Console.Write("Unable to connect to remote ip end point \r\n"); //vypíš chybovú hlášku 
      Main(args); 
     } 

     Console.Write("Enter text: "); 
     string text = Console.ReadLine(); 
     byte[] data = Encoding.ASCII.GetBytes(text); 
     sck.Send(data); 
     Console.Write("Data sent!\r\n"); 
     Console.Write("Press any key to continue..."); 
     Console.Read(); 
     sck.Close(); 
    } 
} 
} 

服务器(数据reciver):

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Net; 
using System.Net.Sockets; 


namespace Server 
{ 
class Program 
{ 
    static byte[] Buffer { get; set; } //vytvor Buffer 
    static Socket sck; 

    static void Main(string[] args) 
    { 
     sck = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //vytvor Socket 
     sck.Bind(new IPEndPoint(0, 1234)); 
     sck.Listen(80); 
     Socket accepted = sck.Accept(); 
     Buffer = new byte[accepted.SendBufferSize]; 
     int bytesRead = accepted.Receive(Buffer); 
     byte[] formatted = new byte[bytesRead]; //vytvor novú Array a jej dĺžka bude dĺžka priatých infomácii 
     for(int i=0; i<bytesRead;i++){ 
      formatted[i] = Buffer[i]; //načítaj z Buffer do formatted všetky priate Bajty 

     } 
     string strData = Encoding.ASCII.GetString(formatted); //z ASCII hodnôt urob reťazec 
     Console.Write(strData + "\r\n"); //vypíš data 
     sck.Close(); //ukonči spojenie 


    } 
} 

} 我的问题是:在客户端程序,我在1234端口上发送数据到本地ip。但我无法连接。我试过端口80,它已连接。所以,请问我的问题在哪里?我怎样才能连接到每个人的端口?请忽略代码中的评论,并请帮助我。

+0

检查你的防火墙。 – Odys

+0

这些程序寄存器(解锁)端口,当你安装它们。 – Odys

+0

我现在不工作,我有一些代码,并且我拥有所有防火墙关闭。哪里可以成为问题? – FrewCen

回答

1

您正在监听端口80,即您的客户端程序应连接的端口。 “1234”是服务器绑定的LOCAL端口。没有什么是在该端口上收听。

1

服务器在哪个ip上监听?你用netstat -an |检查了吗?找到“听”|找到“1234”? (注意:替换听你的语言表达...)。

0可能不是127.0.0.1,但第一个NIC的第一个分配的IP地址......(虽然0应该听取所有接口...但是,唉......

我会一直使用IP-不会忽略在这两个,在客户端和服务器

心连心

马里奥