服务器是好的
用下的客户端可以连上和接受消息!
但是用我写的就不能接受都数据:
客户端代码:
WSADATA wsaData;
SOCKET sClient;
int iPort = DEFAULT_PORT;
int iLen;
char buf[]="165428";//DATA_BUFFER
char IP[50]="127.0.0.1"; struct sockaddr_in ser; memset(buf,0,sizeof(buf));
if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0)
{
printf("Failed to load Winsock.\n");
return 0;
}
ser.sin_family=AF_INET;
ser.sin_port=htons(iPort);
ser.sin_addr.s_addr=inet_addr(IP); sClient=socket(AF_INET,SOCK_STREAM,0); if(sClient == INVALID_SOCKET)
{
printf("socket()Failed:%d\n",WSAGetLastError());
return 0;
}
if(connect(sClient,(struct sockaddr *)&ser,sizeof(ser))==INVALID_SOCKET)
{
printf("connect()Falied:%d\n",WSAGetLastError());
return 0;
}
else
{
iLen=send(sClient,buf,sizeof(buf),0);
if(iLen==SOCKET_ERROR)
{
printf("sent()Failed:%d\n",WSAGetLastError()); return 0;
}
}
用下的客户端可以连上和接受消息!
但是用我写的就不能接受都数据:
客户端代码:
WSADATA wsaData;
SOCKET sClient;
int iPort = DEFAULT_PORT;
int iLen;
char buf[]="165428";//DATA_BUFFER
char IP[50]="127.0.0.1"; struct sockaddr_in ser; memset(buf,0,sizeof(buf));
if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0)
{
printf("Failed to load Winsock.\n");
return 0;
}
ser.sin_family=AF_INET;
ser.sin_port=htons(iPort);
ser.sin_addr.s_addr=inet_addr(IP); sClient=socket(AF_INET,SOCK_STREAM,0); if(sClient == INVALID_SOCKET)
{
printf("socket()Failed:%d\n",WSAGetLastError());
return 0;
}
if(connect(sClient,(struct sockaddr *)&ser,sizeof(ser))==INVALID_SOCKET)
{
printf("connect()Falied:%d\n",WSAGetLastError());
return 0;
}
else
{
iLen=send(sClient,buf,sizeof(buf),0);
if(iLen==SOCKET_ERROR)
{
printf("sent()Failed:%d\n",WSAGetLastError()); return 0;
}
}
或者是连接服务器的时候出错,看看你的IP地址和端口是否设置正确
主要是查看那个地方出错了
客户端是控制台程序!
需要什么注意的么??
char szText[1024]="\0";
::recv(s,szText,1024,0);
GetDlgItem(IDC_EDIT1)->SetWindowText(szText)
An operation was attempted on something that is not a socket.应该是你在哪个地方把端口关闭了。代码又不全,无法判断
{
// TODO: Add your control notification handler code here
WSADATA wsaData;
struct sockaddr_in ser,cli;
WSAStartup(MAKEWORD(2,2),&wsaData);
if(m_socket == INVALID_SOCKET)
{
CString sPort;
GetDlgItem(IDC_PORT)->GetWindowText(sPort);
int nPort=atoi(sPort);
if(nPort<1||nPort>65535)
{
MessageBox("端口号错误!");
return;
}
if(m_socket == INVALID_SOCKET)
{
closesocket(m_socket);
}
m_socket = socket(AF_INET,SOCK_STREAM,0);
if(m_socket == INVALID_SOCKET)
return;
ser.sin_family = AF_INET;
ser.sin_port = htons(nPort);
ser.sin_addr.s_addr = htonl(INADDR_ANY); if(bind(m_socket,(LPSOCKADDR)&ser,sizeof(ser)) == SOCKET_ERROR)
return;
::WSAAsyncSelect(m_socket,m_hWnd,WM_SOCKET,FD_ACCEPT|FD_CLOSE); listen(m_socket,5); GetDlgItem(IDC_START)->SetWindowText("停止服务");
GetDlgItem(IDC_PORT)->EnableWindow(FALSE);
GetDlgItem(IDC_Con)->SetWindowText("正在监听......");
// GetDlgItem(IDC_EDIT1)->SetWindowText(sPort); //m_bar.SetText("正在监听......");// int iLen = sizeof(cli);
// SOCKET sAccept = accept(m_socket,NULL,NULL);//(struct sockaddr*)&cli,&iLen
// if(sAccept == INVALID_SOCKET)
// return;
//
}
else
{
if(m_socket != INVALID_SOCKET)
::closesocket(m_socket);
GetDlgItem(IDC_Con)->SetWindowText("");
m_socket = INVALID_SOCKET;
GetDlgItem(IDC_PORT)->EnableWindow(TRUE);
GetDlgItem(IDC_START)->SetWindowText("开启服务");
}
}long ADDdlg::OnSocket(WPARAM wParam,LPARAM lParam)
{
// 取得有事件发生的套节字句柄
SOCKET s = wParam;
ADOConn con;
// char m_IP[100]="\0",m_TIME[100]="\0",m_DATA[100]="\0",m_NAME[100]="\0";
// int m_ID=0, m_SIZE=0,m_ORDER=0;
// 查看是否出错
if(WSAGETSELECTERROR(lParam))
{
::closesocket(s);
return 0;
}
// 处理发生的事件
switch(WSAGETSELECTEVENT(lParam))
{
case FD_ACCEPT: // 监听中的套接字检测到有连接进入
{
// 接受连接请求,新的套节字client是新连接的套节字
SOCKET client = ::accept(s, NULL, NULL);
// 设置新的套节字为窗口通知消息类型
int i = ::WSAAsyncSelect(client,
m_hWnd, WM_SOCKET, FD_READ|FD_WRITE|FD_CLOSE);
}
break; case FD_CLOSE: // 检测到套接字对应的连接被关闭。
{
::closesocket(s);
}
break; case FD_READ: // 套接字接受到对方发送过来的数据包
{
char szText[1024]="\0";
memset(szText,0,sizeof(szText));
int rLen=::recv(s,szText,1024,0); GetDlgItem(IDC_EDIT1)->SetWindowText(szText);
// _variant_t RecordsAffected;
// CString strSQL;
// strSQL.Format("INSERT INTO new(f_ID,f_SIZE,f_NAME,f_IP,f_TIME,f_ORDER,f_DATA) VALUES(%d,%d,%s,%s,%s,%d,%s)",
// m_ID,m_SIZE,m_NAME,m_IP,m_TIME,m_ORDER,m_DATA);
// con.m_pConnection->Execute((_bstr_t)strSQL,&RecordsAffected,adCmdText);
}
break;
}
return 0;
}