我正在编写一个服务器 - 客户端代码,其中客户端将发送128位数字,服务器返回不同的128位数字。但是在我使用 _mm_set_epi32 来组合4个32位数以获得128位数的某个迭代之后它会卡住。
我无法理解问题所在。是网络问题还是其他问题,因为当我在本地机器上做同样的事情时,它工作正常。
以下是服务器的代码:
#include "allh.h"
#define SERV_TCP_PORT_B1 5035
struct data{
__m128i num;
} tosendb1,tosendb2,recvb1,recvb2;
int main(){
int sockB1,sockB2;
// declaring sockaddr_in
struct sockaddr_in serv_addrb1,serv_addrb2;
struct hostent *server;
// configuring for b1
sockB1=socket(AF_INET,SOCK_STREAM,0);
serv_addrb1.sin_family=AF_INET;
serv_addrb1.sin_addr.s_addr=inet_addr("10.0.0.2");
serv_addrb1.sin_port=htons(SERV_TCP_PORT_B1);
printf("\nReady for sending...\n");
connect(sockB1,(struct sockaddr*)&serv_addrb1,sizeof(serv_addrb1));
uint64_t diffb1,diffb2;
srand(time(NULL)); // randomizing seed with time
// send the number after storing this in the buffer
char buffer[4096];
int count =0;
for (count =0;count<1000000;count++){
printf("%d\n",count );
unsigned int b1=0,b2=0,b3=0,b4=0; // declaring 4 32 bit number to make one 128 bit number
b1 = rand();b2=rand();b3 = rand();b4 = rand();// generate 4 random number
printf("b1 %d\n",b1 );
tosendb1.num = _mm_set_epi32(b1,b2,b3,b4);
write(sockB1,&tosendb1,4096);
printf("write\n");
read(sockB1,&recvb1,4096);
printf("recv\n" );
//clock_gettime(CLOCK_MONOTONIC, &endb1); /* mark the end time */
}
return 0;
}
这是我的客户代码:
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include<string.h>
#include <time.h> /* for clock_gettime */
#include<sys/types.h>
#include<sys/socket.h>
#include<arpa/inet.h> //inet_addr
#include<netinet/in.h>
#include<netdb.h>
#include <sys/syscall.h>
#include <unistd.h>
#include <fcntl.h>
#include <wmmintrin.h>
#include <emmintrin.h>
#include <smmintrin.h>
这是allh.h:
{{1}}