http://www.tjpcn.com
[email protected]

解决方案 »

  1.   

    这种跨平台的socket通讯其实跟统一平台的通讯程序原理完全相同。
    但有几个问题你得首先确定:
    第一,你想用TCP还是UDP协议?
    第二,同步通讯还是异步通讯?
    第三,通讯是长连接还是短连接?在此提供一个tcp的同步短连接通讯server和client的程序框架:
    server.c(in Linux)
    ===========================
    ...(some include files here)
    main()
    {
        ...(fork两次使得该进程变成守护进程)
        iSocket=socket(AF_INET, SOCK_STREAM, 0);
        bind(iSocket, (struct sockaddr *)&stSvrAddr,
             sizeof(struct sockaddr_in));
        listen(iSocket, 10);
      
      for(;;)
      {
        iConnSocket=accept( iSocket, (struct sockaddr*)
           &stSvrAddr,&iSvrAddr_len );
        if(iConnSocket>0)
        {
            iChildPid=fork();
            if( iChildPid == 0) // child process
            {
                close(iSocket);
                recv(iConnSocket, ...);  // 接收数据
                .... // 插入对收到数据的处理
                send(iConnSocket, ...);  // 发送响应
                close(iConnSocket);      // 结束一次连接
            }
            else if(iChildPid > 0)       // parent process
            {
                close(iConnSocket);      //父进程继续侦听
             }
         }
       } // end for
    }
    client.cpp(in Visual C++)
    =========================
    CSocket sockCli;
    char sRecv[200];
    BOOLEAN ab; if(!AfxSocketInit())
             {
    AfxMessageBox("WindowsSocket initial failed!"); 
    return; 
    } sockCli.Create(); ab=sockCli.Connect(ServerIP, ServerPORT);
    if(ab==FALSE)
    {
    AfxMessageBox("FAIL");
    return;
    }

    sockCli.Send("Heoooo.", 20, 0); memset(sRecv, 0x00, sizeof(sRecv));
    sockCli.Receive(sRecv, 128, 0);
    AfxMessageBox(sRecv); sockCli.Close();
      

  2.   

    不明白你什么意思!
    服务器和客户机运行什么平台跟通信有什么关系?只要你定义好双方通信的接口,在linux上开发不过是换一些函数名的问题而已!