Java Client 与C++ Servertcp通信 demo

[java]  view plain copy print ?
  1. java 客户端代码  
  2. 创建socket  
  3. 绑定  
  4.   
  5.  import java.io.BufferedReader;  
  6. import java.io.IOException;  
  7. import java.io.InputStreamReader;  
  8. import java.io.PrintWriter;  
  9. import java.net.InetSocketAddress;  
  10. import java.net.Socket;  
  11.   
  12. public class JavaClient {  
  13.   
  14.     public static void main(String [] args) throws InterruptedException, IOException  
  15.     {  
  16.         InetSocketAddress addr = new InetSocketAddress("127.0.0.1"5678); //创建socket  
  17.         Socket sock = new Socket();    
  18.         sock.connect(addr);//连接服务器  
  19.           
  20.         BufferedReader is = null;  
  21.         PrintWriter os = null;  
  22.       
  23.   
  24.         os = new PrintWriter(sock.getOutputStream()); //管道的写工具  
  25.         is = new BufferedReader(new InputStreamReader(sock.getInputStream()));  //管道的读工具  
  26.   
  27.         BufferedReader user = new BufferedReader(new InputStreamReader(System.in)); //从控制台读取命令的工具  
  28.           
  29.         System.out.print("client say:");  
  30.         String msg = user.readLine();  
  31.   
  32.         while(!msg .equals("bye"))  
  33.         {  
  34.   
  35.             os.println(msg);  
  36.             os.flush();  
  37.               
  38.             String echo = is.readLine();  
  39.             System.out.println(echo);  
  40.               
  41.             System.out.print("client say:");  
  42.             msg = user.readLine();  
  43.         }  
  44.       
  45.         os.close();  
  46.         is.close();  
  47.         sock.close();     
  48.     }     
  49. }  

c++服务器端 ,之前的文章写过的,现在拷贝过来的


创建socket

绑定端口

监听端口

[cpp]  view plain copy print ?
  1. // ConsoleServer.cpp : 定义控制台应用程序的入口点。  
  2. //  
  3.   
  4. #include   
  5. #include   
  6. #pragma comment(lib, "ws2_32.lib")  
  7. #include   
  8.   
  9. std::list client_list;  
  10.   
  11. void thread_client(void * );  
  12.   
  13. int main(int argc, char * argv[])  
  14. {  
  15.     WSADATA wsadata;  
  16.     WSAStartup(0x22, &wsadata);  
  17.   
  18.     unsigned short sPort = argc>1 ? atoi(argv[1]) : 5678;  
  19.   
  20.     int sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);  
  21.       
  22.     if (sockfd == INVALID_SOCKET)  
  23.     {  
  24.         printf("fail to create socket.\n");  
  25.         return 1;  
  26.     }  
  27.   
  28.     sockaddr_in saddr;  
  29.     saddr.sin_addr.s_addr = ADDR_ANY;  
  30.     saddr.sin_port = htons(sPort);  
  31.     saddr.sin_family = AF_INET;  
  32.     if(bind(sockfd, (const sockaddr *)(&saddr), sizeof(saddr)))  
  33.     {  
  34.         printf("fail to bind, errno: %d.\n", GetLastError());     
  35.         DWORD dw = WSAGetLastError();  
  36.         return 2;  
  37.     }  
  38.   
  39.     if (listen(sockfd, 5))  
  40.     {  
  41.         printf("fail to listen.\n");  
  42.         return 3;   
  43.     }  
  44.   
  45.     printf("Server is listening at [%d].\n"  
  46.            "Wating for client to connect...\n"  
  47.            , sPort);  
  48.   
  49.   
  50.     for (;;)  
  51.     {  
  52.         sockaddr_in caddr;  
  53.         int caddr_len = sizeof(caddr);  
  54.         int client = accept(sockfd, (sockaddr *)&caddr, &caddr_len);  
  55.   
  56.         unsigned char * pAddr = (unsigned char *)&caddr.sin_addr.s_addr;  
  57.   
  58.         printf("[%d.%d.%d.%d : %d] coming.\n", pAddr[0], pAddr[1], pAddr[2], pAddr[3], ntohs(caddr.sin_port));  
  59.         _beginthread(thread_client, 0, (void *)client);  
  60.           
  61.         client_list.push_back(client);  
  62.   
  63.     }  
  64.     return 0;  
  65. }  
  66.   
  67. void thread_client(void * args)  
  68. {  
  69.     SOCKET client = (int)args;  
  70.     sockaddr_in caddr;  
  71.     int caddr_len = sizeof(caddr);  
  72.     getpeername(client, (sockaddr *)&caddr, &caddr_len);  
  73.     unsigned char * pAddr = (unsigned char *)&caddr.sin_addr.s_addr;  
  74.     unsigned short usPort = ntohs(caddr.sin_port);  
  75.   
  76.     for (;;)  
  77.     {  
  78.         char szMsg [0x1000] = "";  
  79.         if (0 >= recv(client, szMsg, sizeof(szMsg)-1, 0))  
  80.             break;  
  81.   
  82.         char szEcho [0x1000] = "";  
  83.         sprintf(szEcho, "Server Say: [%d.%d.%d.%d:%d] %s"  
  84.             , pAddr[0], pAddr[1], pAddr[2], pAddr[3]  
  85.             , usPort  
  86.             , szMsg);  
  87.   
  88.         for (std::list::iterator it = client_list.begin();  
  89.                 it != client_list.end();  
  90.                 it ++)  
  91.         {  
  92.             send(*it, szEcho, strlen(szEcho), 0);  
  93.         }         
  94.     }  
  95. }  

通信结果显示,在eclipse里面

你可能感兴趣的:(C++,server,java,通信,tcp)