SSL通信程序握手失败

叫什么都麻烦 2013-06-09 04:10:17
之前使用的时候一直可以的,但是昨天用了一下就不行了


为什么会这样,马上就要交报告了 愁死我了
...全文
1111 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
SQ_Will 2015-08-31
  • 打赏
  • 举报
回复
软件的下载地址能发一下么?
Ryeagle 2014-10-24
  • 打赏
  • 举报
回复
我看你有戏 2013-06-09
  • 打赏
  • 举报
回复
留下qq,详聊
有新工作否 2013-06-09
  • 打赏
  • 举报
回复
判断一下listen_sd ,看看是不是在socket这步出错的,就知道了 还有,你的代码怎么一点都不严谨,有error了,要WSACleanup,closesocket,
叫什么都麻烦 2013-06-09
  • 打赏
  • 举报
回复
引用 4 楼 yudahai109 的回复:
socket(AF_INET, SOCK_STREAM, 0)这个不应该改成IPPROTO_TCP么?我不怎么编写这个,但别人都这么写的
改这个地方的么?但是我下面设置的地址都是使用AF ....的,而且以前也是这样用的,确实可以用,今天不知道怎么回事就是不行了
 //新建socket
    sd = socket (AF_INET, SOCK_STREAM, 0);
    memset (&sa, '\0', sizeof(sa));
    //设置服务端IP地址、和端口
    sa.sin_family      = AF_INET;
    sa.sin_addr.s_addr = dwIP; 
    sa.sin_port        = htons(8443); 
有新工作否 2013-06-09
  • 打赏
  • 举报
回复
socket(AF_INET, SOCK_STREAM, 0)这个不应该改成IPPROTO_TCP么?我不怎么编写这个,但别人都这么写的
叫什么都麻烦 2013-06-09
  • 打赏
  • 举报
回复
//连接服务器端并接收服务器消息的线程函数
void ClientThreadProc(void* void_parm)
{
WSADATA wsaData;
int err;
int sd;
struct sockaddr_in sa;
SSL* ssl;
X509* server_cert;
char* str;
char buffer [8912];
int maxFd;
fd_set writeFds, readFds, excFds;
DWORD dwIP;
dwIP = (DWORD)void_parm;
//char *msg = (char *)malloc(128);
char msg[128];
//初始化windows socket
if (WSAStartup(MAKEWORD(2, 2), &wsaData))
{
return;
}
//新建socket
sd = socket (AF_INET, SOCK_STREAM, 0);
memset (&sa, '\0', sizeof(sa));
//设置服务端IP地址、和端口
sa.sin_family = AF_INET;
sa.sin_addr.s_addr = dwIP;
sa.sin_port = htons(8443);
//连接服务器
err = connect(sd, (struct sockaddr*) &sa,sizeof(sa));
if(err < 0)
{
// char *msg = (char *)malloc(128);
strcpy(msg,"连接服务器失败!");
SendMessage(AfxGetMainWnd()->GetSafeHwnd(),WM_STATE_MSG,sd,(long )msg);
return;
}

strcpy(msg,"SSL开始握手!");
SendMessage(AfxGetMainWnd()->GetSafeHwnd(),WM_STATE_MSG,sd,(long )msg);
//新建SSL句柄
ssl = SSL_new (ctx);
//设置socket句柄到SSL句柄
SSL_set_fd (ssl, sd);
//SSL连接
err = SSL_connect (ssl);
if(err != 1)
{
// char *msg = (char *)malloc(128);
strcpy(msg,"SSL连接服务器失败!");
SendMessage(AfxGetMainWnd()->GetSafeHwnd(),WM_STATE_MSG,sd,(long )msg);
return;
}


这个是以前可以正常使用的

叫什么都麻烦 2013-06-09
  • 打赏
  • 举报
回复
引用 1 楼 yudahai109 的回复:
虽然不会做,但我觉得你应该把源代码贴出来。 还有,你先启动的server吧。
我是先启动的服务器,启动成功后,使用客户端输入127.0.0.1 然后连接 就出现了SSL连接失败,至于服务器的绑定失败,是我最后点击启动又出现的 代码太长了,挑中间的,这个是服务器端的,下个楼贴客户端的

//启动服务线程函数
void StartServer(void* void_parm)
{
	
	WSADATA     	wsaData;
	int err;
	int listen_sd;
	
	unsigned long		idThread;
	struct sockaddr_in sa_serv;
	HANDLE		hd;
	int port = (int) void_parm;
	//初始化windows socket
	if (WSAStartup(MAKEWORD(2, 2), &wsaData))
	{
		char *msg = (char *)malloc(128);
		strcpy(msg,"初始化Socket失败!");
		SendMessage(AfxGetMainWnd()->GetSafeHwnd(),WM_STATE_MSG,0,(long )msg);
		return;
	}
	//新建socket句柄
	listen_sd = socket (AF_INET, SOCK_STREAM, 0);
	//初始化sockaddr_in结构体,设置TCP协议和端口
	memset (&sa_serv, '\0', sizeof(sa_serv));
	sa_serv.sin_family      = AF_INET;
	sa_serv.sin_addr.s_addr = INADDR_ANY;
	sa_serv.sin_port        = htons (port);         
	//绑定端口
	err = bind(listen_sd, (struct sockaddr*) &sa_serv,
		sizeof (sa_serv));          
	if(err < 0)
	{
		char *msg = (char *)malloc(128);
		strcpy(msg,"绑定Socket失败!");
		SendMessage(AfxGetMainWnd()->GetSafeHwnd(),WM_STATE_MSG,listen_sd,(long )msg);
		return;
	}
有新工作否 2013-06-09
  • 打赏
  • 举报
回复
虽然不会做,但我觉得你应该把源代码贴出来。 还有,你先启动的server吧。

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧