我想在linux下用openssl做一个socket传输的加密demo,但是原来没接触过,有些问题。下面这个是我发送和接收的代码,里面发送和接收了rsa公钥的数据和长度,但是不是每次发送都能成功,比如第一次成功接收,之后再次运行这两个程序,就接收不到了,求帮助解决。
//send.cpp
int sendKey(unsigned char *pk,int pk_len,int serv_sock){
int32_t conv=htonl(pk_len);
char *data = (char*)&conv;
int len = sizeof(conv);
char *key=(char*)pk;
struct sockaddr_in clnt_addr;
socklen_t clnt_addr_size = sizeof(clnt_addr);
int clnt_sock = accept(serv_sock, (struct sockaddr*)&clnt_addr, &clnt_addr_size);
int rc1=write(clnt_sock, data, len);
if(rc1<0){
printf("errno is %d\n",errno);
}
int rc2=write(clnt_sock, key, pk_len);
if(rc2<0){
printf("errno is %d\n",errno);
}
close(clnt_sock);
}
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
int main(){
int sock = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in serv_addr;
memset(&serv_addr, 0, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = inet_addr("192.168.0.100");
serv_addr.sin_port = htons(8000);
connect(sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr));
unsigned char buffer[100000];
int32_t pk_len=0;
char *data=(char*)&pk_len;
read(sock, data, sizeof(pk_len));
read(sock, buffer, ntohl(pk_len));
for (int i=0; i<ntohl(pk_len); i++)
{
printf("0x%02x, ", *(buffer+i));
}
printf("pklen from server:%d\n",ntohl(pk_len));
close(sock);
return 0;
}
