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

绑定端口

监听端口

  1. // ConsoleServer.cpp : 定义控制台应用程序的入口点。  
  2. //  
  3.   
  4. #include <winsock2.h>  
  5. #include <process.h>  
  6. #pragma comment(lib, "ws2_32.lib")  
  7. #include <list>  
  8.   
  9. std::list<SOCKET> 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<SOCKET>::iterator it = client_list.begin();  
  89.                 it != client_list.end();  
  90.                 it ++)  
  91.         {  
  92.             send(*it, szEcho, strlen(szEcho), 0);  
  93.         }         
  94.     }  
  95. }  

通信结果显示,在eclipse里面

根据提供的引用内容,SPPFCSPC是一种空间金字塔池化改进的方法。下面是SPPFCSPC的代码详解: ```python import torch import torch.nn as nn class SPPFCSPC(nn.Module): def __init__(self, in_channels, out_channels): super(SPPFCSPC, self).__init__() self.conv1 = nn.Conv2d(in_channels, out_channels, kernel_size=3, padding=1) self.conv2 = nn.Conv2d(out_channels, out_channels, kernel_size=3, padding=1) self.maxpool = nn.MaxPool2d(kernel_size=2, stride=2) self.spp = SpatialPyramidPooling(out_channels) self.fc = nn.Linear(out_channels * 4, out_channels) def forward(self, x): x = self.conv1(x) x = self.conv2(x) x = self.maxpool(x) x = self.spp(x) x = x.view(x.size(0), -1) x = self.fc(x) return x class SpatialPyramidPooling(nn.Module): def __init__(self, out_channels): super(SpatialPyramidPooling, self).__init__() self.out_channels = out_channels def forward(self, x): pool_sizes = [4, 2, 1] # 池化层的大小 output = [] for pool_size in pool_sizes: pool = nn.AdaptiveMaxPool2d(pool_size) pooled = pool(x) output.append(pooled) output = torch.cat(output, dim=1) return output # 使用示例 in_channels = 3 out_channels = 64 input_data = torch.randn(1, in_channels, 224, 224) model = SPPFCSPC(in_channels, out_channels) output = model(input_data) print(output.shape) ``` 上述代码中,`SPPFCSPC`是一个继承自`nn.Module`的自定义模型,它包含了卷积层、最大池化层、空间金字塔池化层和全连接层。`SpatialPyramidPooling`是一个单独的模块,用于实现空间金字塔池化操作。 在`SPPFCSPC`的前向传播过程中,输入数据经过两个卷积层和一个最大池化层,然后通过空间金字塔池化层进行特征提取,最后通过全连接层输出最终结果。 使用示例中,我们创建了一个输入数据`input_data`,它的形状是`(1, in_channels, 224, 224)`,然后创建了一个`SPPFCSPC`模型,并将输入数据传入模型进行前向传播,得到输出结果`output`。最后打印输出结果的形状。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值