如题,我用的是Winsock组件编写TCP/IP程序,在客户端程序中,我想在连接失败的时候,提示失败信息,然后退出程序。我现在的处理方法是在Winsock的Error事件中写如下程序的:
msgbox "与服务器端连接失败!"
unload me但是,经常遇到关闭窗口之后,会出现非法错误,提示不能读取内存,但有的时候又不会提示非法错误,真是奇怪了。
msgbox "与服务器端连接失败!"
unload me但是,经常遇到关闭窗口之后,会出现非法错误,提示不能读取内存,但有的时候又不会提示非法错误,真是奇怪了。
#include "skthead.h"
#include "stdio.h"SOCKETEXPORT int init_socket()
{
WSADATA wsdData;
if(WSAStartup(0x202,&wsdData)!=0)
{
WSACleanup();
return 0;
}
if (LOBYTE(wsdData.wVersion)!=2 || HIBYTE(wsdData.wVersion) != 2)
{
WSACleanup();
return 0;
}
return 1;
}
SOCKETEXPORT int init_server(char *strip)
{
if(strlen(strip)==0)
return 0;
strcpy(m_strip,strip);
return 1;
}
SOCKETEXPORT int creat_socket()
{
char chInfo[64]; if (gethostname(chInfo, sizeof(chInfo)))
return 0; sock = socket (AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(sock==INVALID_SOCKET)
return 0;
return 1;
}
SOCKETEXPORT int conn_socket()
{
sockaddr_in local;
local.sin_family=AF_INET;
local.sin_addr.s_addr=inet_addr(m_strip);
local.sin_port=htons(PORT);
if(connect(sock,(sockaddr *)&local,sizeof(local))!=0)
{
WSACleanup();
return 0;
}
return 1;
}
SOCKETEXPORT int bind_socket()
{
sockaddr_in local;
local.sin_family=AF_INET;
local.sin_addr.s_addr=INADDR_ANY;
local.sin_port=htons(PORT);
if(bind(sock,(sockaddr *)&local,sizeof(local))!=0)
{
WSACleanup();
return 0;
}
return 1;
}
SOCKETEXPORT int read_socket(SOCKET m_ReadSock,struct databuf &buf_data)
{
recv(m_ReadSock,buf_data.strcd,3,0);
recv(m_ReadSock,buf_data.size,4,0); int size=atoi(buf_data.size);
if(buf_data.buf!=NULL)
delete buf_data.buf;
buf_data.buf=new char [size+1]; int recvlen=recv(m_ReadSock,buf_data.buf,size,0); if(recvlen!=size)
return 0;
return 1;
}
SOCKETEXPORT int send_socket(struct databuf buf_data)
{
char *buf;
int size=atoi(buf_data.size)+7;
buf=new char[size];
strcpy(buf,buf_data.strcd);
strcat(buf,buf_data.size);
strcat(buf,buf_data.buf);
int sendlen=send (sock,buf,strlen(buf),0);
int sendsize=strlen(buf);
delete buf;
if(sendlen!=sendsize)
return 0;
if(sendlen==0)
return 0;
return 1;
}
SOCKETEXPORT int accept_socket(SOCKET &m_ReadSock)
{
sockaddr_in from;
SOCKET m_socket=NULL;
int fromlen=sizeof(from);
m_ReadSock=accept(sock,(struct sockaddr*)&from,&fromlen);
if(m_ReadSock==INVALID_SOCKET)
return 0;
return 1;
}
SOCKETEXPORT void close_socket()
{
closesocket(sock);
}
SOCKETEXPORT int listen_socket()
{
if(listen(sock,5)!=0)
{
WSACleanup();
return 0;
}
return 1;
}
改VB成DLL或我直接发给你DLL,我的使用末问题.