c++与java通过socket实现网络通信的测试



 这个小测试仅仅是为了证明一点:掌握了原理后,语言不再是问题,c++和java也可以实现“通婚”。

C++服务器端代码:
#include<winsock2.h>
#include<iostream>
using namespace std;

int main(){
      SOCKET ServerSocket; //服务器
     string client_ip ;//客户对应ip
      int port=9090;//端口号

      cout<<"C++服务器初始化!....."<<endl;
      //初始化winsock
      WSADATA wsaD; //WSADATA结构被用来保存函数WSAStartup返回的 Windows Sockets初始化信息。
       WSAStartup(MAKEWORD(1,1),&wsaD); //初始化Windows Sockets DLL
       //一、创建监听套接字 ,TCP
     ServerSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
     //af:协议地址家族。创建TCP/UDP套接字时该参数为AF_INET。
     //type:协议的套接字类型。有SOCK_STREAM、SOCK_DGRAM和SOCK_RAM 3种类型
     //protocol:协议。对于SOCK_STREAM套接字类型,该字段为IPPROTO_TCP或为0,
     // 对于SOCK_DGRAM套接字类型,该字段为IPPROTO_UDP或为0
     // 二、绑定主机地址和监听套接字
    struct sockaddr_in server_addr; //主机地址
    cout<<"主机地址"<<server_addr.sin_family<<endl;
    server_addr.sin_family = AF_INET; //协议地址家族
    cout<<"协议地址家族"<<server_addr.sin_family<<endl;
    server_addr.sin_port = htons(port); //指定端口 
   cout<<"服务器端口:"<<port<<endl;
    cout<<"server_addr.sin_port:"<<server_addr.sin_port<<endl;
    server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
    // cout<<"server_addr.sin_addr.s_addr: "<<server_addr.sin_addr.s_addr<<endl;
    bind(ServerSocket,(struct sockaddr *)&server_addr,sizeof(server_addr));
    //三、启动监听
    listen(ServerSocket,5);
    while(true){
    //四、连接
           struct sockaddr_in c_addr; //客户地址 
           int addr_len =sizeof(c_addr);
           SOCKET clientsock = accept(ServerSocket,(struct sockaddr*)&c_addr,&addr_len); //通过监听套接字创建连接套接字
            client_ip = inet_ntoa(c_addr.sin_addr);
            cout<<"one java client is coming..."; 
      //五、收发数据
      //具体通信处理
     }
      //六、关闭
      //system("PAUSE");
       return 0;
}

     注意:要将socket动态库libws2_32.a添加到linker: C:/Dev-Cpp/lib/libws2_32.a 中,具体添加方法网上有。如果需要可以给我留言。

 

java客户端代码:

写道
import java.io.*;
import java.net.*;

public class TCPClient {

     public static void main(String[] args) throws Exception{
         Socket clientSocket = new Socket("192.168.1.103",9090);
        //收发数据,具体通信处理 
        //...............................   
        clientSocket.close();
}

 效果:


c++与java通过socket实现网络通信的测试
 

至此,c++和java的“Socket联姻”就完成了,接下来要怎么进行工作,你说了算!