主程序:

 Main(String[] args)
    {


        IPAddress ipAddress = IPAddress.Parse("192.168.1.104");
        
int port = 20000;
        IPEndPoint remoteEP 
= new IPEndPoint(ipAddress, port);

        
// 生成一个TCP/IP socket.
        Socket client = new Socket(AddressFamily.InterNetwork,
            SocketType.Stream, ProtocolType.Tcp);

        
// 与目标终端连接.
        client.BeginConnect(remoteEP,
            
new AsyncCallback(ConnectCallback), client);
        
//等待,直到连接程序完成。在ConnectCallback中适当位置有connecDone.Set()语句
        connectDone.WaitOne();

        
// 发送数据到远程终端.
        Send(client, "This is a test<EOF>");
        sendDone.WaitOne();

        
// 接收返回数据.
        Receive(client);
        receiveDone.WaitOne();

        
// Write the response to the console.
        Console.WriteLine("Response received : {0}", response);

        
// Release the socket.
        client.Shutdown(SocketShutdown.Both);
        client.Close();

        
return 0;

    }

连接部分Callback:

 ConnectCallback(IAsyncResult ar)
    {

            // 从state对象获取socket.
            Socket client = (Socket)ar.AsyncState;

            
// 完成连接.
            client.EndConnect(ar);

            Console.WriteLine(
"Socket connected to {0}",
                client.RemoteEndPoint.ToString());

            
// 连接已完成,主线程继续.
            connectDone.Set();
    }

数据接收:

 

 Receive(Socket client)
    {

            // 构造容器state.
            StateObject state = new StateObject();
            state.workSocket 
= client;

            
// 从远程目标接收数据.
            client.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0,
                
new AsyncCallback(ReceiveCallback), state);
  
    }

    
private static void ReceiveCallback(IAsyncResult ar)
    {

            
// 从输入参数异步state对象中获取state和socket对象
            StateObject state = (StateObject)ar.AsyncState;
            Socket client 
= state.workSocket;

            
//从远程设备读取数据
            int bytesRead = client.EndReceive(ar);

            
if (bytesRead > 0)
            {
                
// 有数据,存储.
                state.sb.Append(Encoding.ASCII.GetString(state.buffer, 0, bytesRead));

                
// 继续读取.
                client.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0,
                    
new AsyncCallback(ReceiveCallback), state);
            }
            
else
            {
                
// 所有数据读取完毕.
                if (state.sb.Length > 1)
                {
                    response 
= state.sb.ToString();
                }
                
// 所有数据读取完毕的指示信号.
                receiveDone.Set();
            }

    }

 

发送数据:

 


    private static void Send(Socket client, String data)
    {
        
// 格式转换.
        byte[] byteData = Encoding.ASCII.GetBytes(data);

        
// 开始发送数据到远程设备.
        client.BeginSend(byteData, 0, byteData.Length, 0,
            
new AsyncCallback(SendCallback), client);
    }

    
private static void SendCallback(IAsyncResult ar)
    {

            
// 从state对象中获取socket
            Socket client = (Socket)ar.AsyncState;

            
// 完成数据发送.
            int bytesSent = client.EndSend(ar);
            Console.WriteLine(
"Sent {0} bytes to server.", bytesSent);

            
// 指示数据已经发送完成,主线程继续.
            sendDone.Set();

    }

相关文章: