2015-09-24 55 views
-3

我是网络编程的新手,我想知道通过LAN连接连接的两台计算机之间交换消息的情况。如何从特定的IP地址读取数据包?

假设我的IP地址是192.168.1.98和其他计算机的IP = 192.168.1.55

然后,我怎么能发送和接收它们之间的消息。

如何连接,打开并读取数据包和消息,如果我知道其他机器的端口和IP地址。

II希望通过c#。

请帮忙!

回答

2

SO不是教程网站。对于您的问题,您可以使用Google搜索tcp communicationc# tcp example。首先,您需要了解TCP如何工作以及如何使用套接字。然后你将能够处理一个简单的沟通。

.net框架为TcpListenerTcpClient提供了一些帮助,它应该适合您的通信基本需求。

此代码示例取自前几页。

的TcpListener:

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

class MyTcpListener 
{ 
    public static void Main() 
    { 
    TcpListener server=null; 
    try 
    { 
     // Set the TcpListener on port 13000. 
     Int32 port = 13000; 
     IPAddress localAddr = IPAddress.Parse("127.0.0.1"); 

     // TcpListener server = new TcpListener(port); 
     server = new TcpListener(localAddr, port); 

     // Start listening for client requests. 
     server.Start(); 

     // Buffer for reading data 
     Byte[] bytes = new Byte[256]; 
     String data = null; 

     // Enter the listening loop. 
     while(true) 
     { 
     Console.Write("Waiting for a connection... "); 

     // Perform a blocking call to accept requests. 
     // You could also user server.AcceptSocket() here. 
     TcpClient client = server.AcceptTcpClient();    
     Console.WriteLine("Connected!"); 

     data = null; 

     // Get a stream object for reading and writing 
     NetworkStream stream = client.GetStream(); 

     int i; 

     // Loop to receive all the data sent by the client. 
     while((i = stream.Read(bytes, 0, bytes.Length))!=0) 
     { 
      // Translate data bytes to a ASCII string. 
      data = System.Text.Encoding.ASCII.GetString(bytes, 0, i); 
      Console.WriteLine("Received: {0}", data); 

      // Process the data sent by the client. 
      data = data.ToUpper(); 

      byte[] msg = System.Text.Encoding.ASCII.GetBytes(data); 

      // Send back a response. 
      stream.Write(msg, 0, msg.Length); 
      Console.WriteLine("Sent: {0}", data);    
     } 

     // Shutdown and end connection 
     client.Close(); 
     } 
    } 
    catch(SocketException e) 
    { 
     Console.WriteLine("SocketException: {0}", e); 
    } 
    finally 
    { 
     // Stop listening for new clients. 
     server.Stop(); 
    } 


    Console.WriteLine("\nHit enter to continue..."); 
    Console.Read(); 
    } 
} 

的TcpClient:

static void Connect(String server, String message) 
{ 
    try 
    { 
    // Create a TcpClient. 
    // Note, for this client to work you need to have a TcpServer 
    // connected to the same address as specified by the server, port 
    // combination. 
    Int32 port = 13000; 
    TcpClient client = new TcpClient(server, port); 

    // Translate the passed message into ASCII and store it as a Byte array. 
    Byte[] data = System.Text.Encoding.ASCII.GetBytes(message);   

    // Get a client stream for reading and writing. 
    // Stream stream = client.GetStream(); 

    NetworkStream stream = client.GetStream(); 

    // Send the message to the connected TcpServer. 
    stream.Write(data, 0, data.Length); 

    Console.WriteLine("Sent: {0}", message);   

    // Receive the TcpServer.response. 

    // Buffer to store the response bytes. 
    data = new Byte[256]; 

    // String to store the response ASCII representation. 
    String responseData = String.Empty; 

    // Read the first batch of the TcpServer response bytes. 
    Int32 bytes = stream.Read(data, 0, data.Length); 
    responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes); 
    Console.WriteLine("Received: {0}", responseData);   

    // Close everything. 
    stream.Close();   
    client.Close();   
    } 
    catch (ArgumentNullException e) 
    { 
    Console.WriteLine("ArgumentNullException: {0}", e); 
    } 
    catch (SocketException e) 
    { 
    Console.WriteLine("SocketException: {0}", e); 
    } 

    Console.WriteLine("\n Press Enter to continue..."); 
    Console.Read(); 
} 
+1

如果它不是一个教程网站(你是正确的它不是),那你为什么有教程回答?请不要回答不好的问题,它只会鼓励他们提出更多相同的问题。 –

+2

因为我认为更好地帮助纠正问题,然后尝试回答OP所遇到的实际问题。只是说这个问题不好,不要帮助。 – tomab

+0

对不便,但如果我问的是C#代码,那么问题是什么? –

相关问题