MFC做的socket连接的TCP聊天程序,客户端总是连接不上服务器端,上午还好好的,
MFC做的socket连接的TCP聊天程序,客户端总是连接不上服务器端,上午还好好的,下午就一直连接不上,总是怀疑是电脑或者是VC的问题,因为有时候重新装下VC,程序就又好了,请问有懂的吗?这到底是哪里的问题》?用的VC6.0

1个回答

先看端口是否侦听 客户端连接的具体错误信息

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
MFC TCP聊天程序,客户端为什么接受不到服务器发送的信息
客户端://连接服务器端 void CChat_TCPClientDlg::OnButtonConnnet() { m_socket = socket(AF_INET,SOCK_STREAM,0); int retconnect; unsigned short temport; UpdateData(TRUE);//刷新控件的值到变量上,刷新端口号 temport = (unsigned short)m_ClientPort; DWORD dwIP; ((CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESS))->GetAddress(dwIP); sockaddr_in addrTo; addrTo.sin_addr.S_un.S_addr = htonl(dwIP); addrTo.sin_family = AF_INET; addrTo.sin_port = htons(temport); retconnect = connect(m_socket,(sockaddr*)&addrTo,sizeof(sockaddr)); if(SOCKET_ERROR == retconnect) { SetDlgItemText(IDC_EDIT_STATE,"连接失败"); return; } else SetDlgItemText(IDC_EDIT_STATE,"连接成功"); CButton *pButton=(CButton*)GetDlgItem(IDC_BUTTON_CONNNET); pButton->EnableWindow(FALSE); pButton=(CButton*)GetDlgItem(IDC_BUTTON_OUT); pButton->EnableWindow(TRUE); pButton=(CButton*)GetDlgItem(IDC_BUTTON_SEND); pButton->EnableWindow(TRUE); pButton=(CButton*)GetDlgItem(IDC_BUTTON_CLEAR); pButton->EnableWindow(TRUE); GetDlgItemText(IDC_EDIT_USERNAME,username); char NewMember[200]; CTime tm=CTime::GetCurrentTime(); CString str=tm.Format("%Y-%m-%d %H:%M:%S"); sprintf(NewMember,"%s--->进入聊天室 %s",username,str); send(m_socket,NewMember,sizeof(NewMember),0); HANDLE thread; thread=CreateThread(NULL,0,RecvProc,NULL,0,NULL); CloseHandle(thread); } DWORD WINAPI CChat_TCPClientDlg::RecvProc(LPVOID lpParameter) { CChat_TCPClientDlg* pDlg = (CChat_TCPClientDlg*)(::AfxGetApp()->GetMainWnd()); SOCKET ClientSocket; ClientSocket = pDlg->m_socket; HWND hwnd = pDlg->m_hWnd; int retrecv=0; char recvbuf[1024]; while(1) { memset(recvbuf,0,sizeof(recvbuf)); retrecv = recv(ClientSocket,recvbuf,1024,0); if(SOCKET_ERROR == retrecv) { ::SetDlgItemText(hwnd,IDC_EDIT_STATE,"连接断开"); break; } else { pDlg->m_ListRecv.AddString(recvbuf); pDlg->m_ListRecv.SetHorizontalExtent(10000); } } return 0; } void CChat_TCPClientDlg::OnButtonSend() { // TODO: Add your control notification handler code here CString tempSend; char strSend[300]; GetDlgItemText(IDC_EDIT_SEND,tempSend); GetDlgItemText(IDC_EDIT_USERNAME,username); sprintf(strSend,"%s说: %s",username,tempSend); int retsend; retsend = send(m_socket,strSend,strlen(strSend)+1,0); if(retsend==SOCKET_ERROR) { CButton *pButton=(CButton*)GetDlgItem(IDC_BUTTON_OUT); pButton->EnableWindow(FALSE); pButton=(CButton*)GetDlgItem(IDC_BUTTON_SEND); pButton->EnableWindow(FALSE); pButton=(CButton*)GetDlgItem(IDC_BUTTON_CLEAR); pButton->EnableWindow(FALSE); pButton=(CButton*)GetDlgItem(IDC_BUTTON_CONNNET); pButton->EnableWindow(TRUE); SetDlgItemText(IDC_EDIT_STATE,"连接断开"); } else { SetDlgItemText(IDC_EDIT_SEND,""); } } void CChat_TCPClientDlg::OnButtonOut() { // TODO: Add your control notification handler code here /* GetDlgItemText(IDC_EDIT_USERNAME,username); char leavechar[50]; sprintf(leavechar,"%s<---离开聊天室",username); send(m_socket,leavechar,sizeof(leavechar),0);*/ closesocket(m_socket); SetDlgItemText(IDC_EDIT_STATE,"没有连接"); CButton *pButton=(CButton*)GetDlgItem(IDC_BUTTON_CONNNET); pButton->EnableWindow(TRUE); pButton=(CButton*)GetDlgItem(IDC_BUTTON_OUT); pButton->EnableWindow(FALSE); pButton=(CButton*)GetDlgItem(IDC_BUTTON_SEND); pButton->EnableWindow(FALSE); pButton=(CButton*)GetDlgItem(IDC_BUTTON_CLEAR); pButton->EnableWindow(FALSE); } void CChat_TCPClientDlg::OnButtonClear() { // TODO: Add your control notification handler code here m_ListRecv.ResetContent(); } 服务器: // the minimized window. HCURSOR CChat_TCPSrvDlg::OnQueryDragIcon() { return (HCURSOR) m_hIcon; } BOOL CChat_TCPSrvDlg::InitSocket(unsigned short port) { //初始化连接套接字 ClientTotal = 0; for(int i=0;i<20;i++) { ClientSocket[i] = 0; ClientAddr[i] = ""; } //创建绑定监听套接字 m_socket = socket(AF_INET,SOCK_STREAM,0); if(INVALID_SOCKET==m_socket) { SysStr = "创建socket失败"; m_SysMsg.AddString(SysStr); return FALSE; } else { SysStr = "创建socket成功"; m_SysMsg.AddString(SysStr); m_SysMsg.SetHorizontalExtent(1000); } //地址族赋值 sockaddr_in addrsock; addrsock.sin_addr.S_un.S_addr = htonl(INADDR_ANY); addrsock.sin_family = AF_INET; addrsock.sin_port = htons(port); //绑定套接字 int retbind; retbind = bind(m_socket,(SOCKADDR*)&addrsock,sizeof(SOCKADDR)); if(SOCKET_ERROR==retbind) { closesocket(m_socket); SysStr = "bind 失败"; m_SysMsg.AddString(SysStr); SysStr = "启动失败"; m_SysMsg.AddString(SysStr); return FALSE; } else { SysStr = "bind成功"; m_SysMsg.AddString(SysStr); } //设置监听模式 if(listen(m_socket,20)!=0) { SysStr = "启动失败"; m_SysMsg.AddString(SysStr); return FALSE; } else { SysStr = "服务器启动成功"; m_SysMsg.AddString(SysStr); } return TRUE; } //启动服务器 void CChat_TCPSrvDlg::OnButtonStart() { // TODO: Add your control notification handler code here SrvState = TRUE; ClientTotal = 0; unsigned short temport; BOOL InitSock; UpdateData(TRUE); temport = m_Port; if(temport>=1025 && temport<=9999) { InitSock = InitSocket(temport); //调用初始化套接字 //让“启动按钮”不可用,和让“关闭按钮”可用 CButton *pButton=(CButton*)GetDlgItem(IDC_BUTTON_CLOSE); pButton->EnableWindow(); pButton=(CButton*)GetDlgItem(IDC_BUTTON_START); pButton->EnableWindow(FALSE); //创建一级线程,用于监听用户的连接 HANDLE hThread=CreateThread(NULL,0,AcceptClient,NULL,0,NULL); CloseHandle(hThread); } else { SysStr="端口号不在使用范围内,启动失败"; m_SysMsg.AddString(SysStr); m_SysMsg.SetHorizontalExtent(1000); } hMutex = CreateMutex(NULL,FALSE,NULL); } //一级线程,连接客户请求 DWORD WINAPI CChat_TCPSrvDlg::AcceptClient(LPVOID lpParameter) { CChat_TCPSrvDlg* pDlg = (CChat_TCPSrvDlg*)(::AfxGetApp()->GetMainWnd()); SOCKET socketacp = pDlg->m_socket; sockaddr_in addrClient; int len = sizeof(sockaddr); while(pDlg->SrvState) { pDlg->ClientSocket[pDlg->ClientTotal]=accept(socketacp,(SOCKADDR *)&addrClient,&len); WaitForSingleObject(pDlg->hMutex,INFINITE); pDlg->ClientTotal++; pDlg->SysStr = "新用户加入"; pDlg->m_SysMsg.AddString(pDlg->SysStr); ReleaseMutex(pDlg->hMutex); if(pDlg->ClientTotal==1) //只是用来启动二级进程,当第二个客户端连接上后,if语句不执行,recv进程一直在执行 { //创建二级线程,用于接收数据。 HANDLE hThread=CreateThread(NULL,0,RecvProc,NULL,0,NULL); CloseHandle(hThread); } } return 0; } //二级线程,接收用户消息,并显示 DWORD WINAPI CChat_TCPSrvDlg::RecvProc(LPVOID lpParameter) { CChat_TCPSrvDlg* pDlg1 = (CChat_TCPSrvDlg*)(::AfxGetApp()->GetMainWnd()); fd_set fsRead; timeval tm = {0,10000}; char recvBuf[200]; while(pDlg1->SrvState) { FD_ZERO(&fsRead); for(int m=0;m<(pDlg1->ClientTotal);m++) //对所有用户进行select监视 FD_SET((pDlg1->ClientSocket[m]),&fsRead); int retRead = select(pDlg1->ClientTotal+1,&fsRead,NULL,NULL,&tm); if(SOCKET_ERROR == retRead) return 1; else { for(int index=0;index<(pDlg1->ClientTotal);index++) { if(FD_ISSET(pDlg1->ClientSocket[index],&fsRead)) { memset(recvBuf,0,sizeof(recvBuf)); recv(pDlg1->ClientSocket[index],recvBuf,sizeof(recvBuf),0); if(strlen(recvBuf)==0) //判断用户是否退出 { pDlg1->SysStr = "有一个用户离开"; pDlg1->m_SysMsg.AddString(pDlg1->SysStr); pDlg1->ClientSocket[index] = pDlg1->ClientSocket[pDlg1->ClientTotal-1]; //将最后一个放到刚刚退出的client那里去 pDlg1->ClientSocket[pDlg1->ClientTotal-1] = 0; //保证所有未退出的客户端都在前面 if(pDlg1->ClientTotal==0) return 0; pDlg1->ClientTotal--; } else { pDlg1->m_UserMsg.AddString(recvBuf); pDlg1->m_UserMsg.SetHorizontalExtent(10000); for(int n=0;n<(pDlg1->ClientTotal);n++) { send(pDlg1->ClientSocket[n],recvBuf,sizeof(recvBuf),0); } } } } } } return 0; } //关闭服务器 void CChat_TCPSrvDlg::OnButtonClose() { // TODO: Add your control notification handler code here WaitForSingleObject(hMutex,INFINITE); SysStr="服务器已关闭"; m_SysMsg.AddString(SysStr); SrvState = FALSE; for(int k=0;k<ClientTotal;k++) send(ClientSocket[k],"服务器已关闭,请断开服务器重新连接",sizeof("服务器已关闭,请断开服务器重新连接")+1,0); closesocket(m_socket); while(ClientTotal>0) { closesocket(ClientSocket[ClientTotal-1]); ClientTotal--; } CButton *pButton=(CButton*)GetDlgItem(IDC_BUTTON_CLOSE); pButton->EnableWindow(FALSE); pButton=(CButton*)GetDlgItem(IDC_BUTTON_START); pButton->EnableWindow(); } void CChat_TCPSrvDlg::OnClickedButtonSend() { // TODO: 在此添加控件通知处理程序代码 CString tempSend; char strSend[300]; GetDlgItemText(IDC_EDIT_SEND,tempSend); sprintf(strSend,"服务器: %s",tempSend); send(m_socket,strSend,strlen(strSend)+1,0); m_UserMsg.AddString(strSend); SetDlgItemText(IDC_EDIT_SEND,""); } void CChat_TCPSrvDlg::OnClickedButtonClear() { // TODO: 在此添加控件通知处理程序代码 m_UserMsg.ResetContent(); } ![图片说明](https://img-ask.csdn.net/upload/201704/11/1491901491_164250.jpg)
MFC中socket TCP编程问题
我在控制台用socket的tcp编程,测试完全没有问题。但是把它直接用在MFC对话框的一个按钮中,先点击服务器端的按钮,再点击客户端的按钮后,服务器端就死机了,一直就是未响应。。求救\("▔□▔)/谢谢!
MFC, TCP/IP客户端连接失败,API 错误码1967541584
1.编译可以顺利通过,在一个电脑上同时运行客户端和服务器时,连接正常,可以发送消息。 2.在两个电脑分别运行客户端和服务器时,客户端无法链接服务器,IP 和端口配置都是正确的,猜想问题应该出在客户端执行 connect 时出错。 3.一台电脑时在 accept 设置断点,顺利执行。两台电脑时在服务器端 accept 设置断点,没有执行。可知问题出现在客户端。 4.错误码返回时间大概在 20 s-24 s之间。 5.尝试过关掉网络防火墙,其中两台电脑分别是 win10,win7。也是连接不上 主要代码: ``` UINT nPort = atoi(szPort); //将字符串类型转换成数值类型 m_sock.Create(); if(m_sock.Connect(szIP, nPort)) { MessageBox("成功连接服务器","提示"); CString szFormat; szFormat.Format("%s----->%s",m_szName,"进入聊天室"); m_sock.Send(szFormat.GetBuffer(0), szFormat.GetLength()); } else { //连接服务器端运行的主机IP地址 CString str; str.Format("连接失败:%d",GetLastError); AfxMessageBox(str); } ``` 错误提示图片: ![图片说明](https://img-ask.csdn.net/upload/201905/11/1557565380_362851.png)
VS2017,MFC,TCP通信,客户端无法连接调试助手
#1.自己所创建的客户端无法连接调试助手。 自己创建的客户端可以和自己创建的服务器端通信,调试助手连不了自己创建的服务器,自己创建的客户端也连不了调试助手。完全不知道问题出在哪了,, 两个客户端可以同时运行,端口和IP使用情况如下: ![图片说明](https://img-ask.csdn.net/upload/201901/17/1547695891_291269.png) #2.客户端核心代码如下: ##“连接”按钮的时间处理程序。 void CGeoDlg::OnBnClickedButton1() { // TODO: 在此添加控件通知处理程序代码 char ipaddress[35]; char port[8]; m_ipaddr.GetWindowText(ipaddress,30); cli.sin_addr.s_addr = inet_addr(ipaddress); cli.sin_family = AF_INET; cli.sin_port = m_ter.GetWindowText(port,8); //htons(5000); //创建socket clisock = socket(AF_INET, SOCK_STREAM, 0); //启动线程 ee = 1; AfxBeginThread(thread, 0); } ##线程AfxBeginThread()代码如下 UINT thread(LPVOID v) { char buff[100]; char array[25][30] = { "155.245.160.151", "155.245.160.152", "155.245.160.153", "155.245.160.154", "155.245.160.155", "155.245.160.156", "155.245.160.157", "155.245.160.158", "155.245.160.159", "155.245.160.160", "155.245.160.161", "155.245.160.162", "155.245.160.163", "155.245.160.164", "155.245.160.165", "155.245.160.166", "155.245.160.167", "155.245.160.168", "155.245.160.169", "155.245.160.170", "155.245.160.171", "155.245.160.172", "155.245.160.173", "155.245.160.174", "155.245.160.171" }; /*CSize size; size.cx = 0; size.cy = 30;*/ int s = 1, addcount = 0; CGeoDlg *dlg = (CGeoDlg*)AfxGetApp()->GetMainWnd(); dlg->m_connect.EnableWindow(FALSE); dlg->m_disconnect.EnableWindow(TRUE); //连接到服务器 while (connect(dlg->clisock, (sockaddr*)&(dlg->cli), sizeof(dlg->cli)) && dlg->ee != 0) { dlg->m_edit.SetWindowText("等待....."); //空循环 for (int i = 0; i <= 65000; i++) for (int j = 0; j <= 200; j++); if (addcount == 25) addcount = 0; dlg->cli.sin_addr.s_addr = inet_addr(array[addcount++]); } if (dlg->ee == 1) dlg->m_edit.SetWindowText( "连接成功"); //dlg->m_button1.EnableWindow(TRUE); dlg->SetForegroundWindow(); //循环获得数据 /*while (s != SOCKET_ERROR && dlg->ee != 0) { //调用recv函数接收数据 s = recv(dlg->clisock, buff, 100, 0); dlg->SetForegroundWindow(); if (s != SOCKET_ERROR && dlg->ee != 0) dlg->m_list.InsertItem(dlg->count++, buff); dlg->m_list.Scroll(size); }*/ //发送断开命令 send(dlg->clisock, "Disconnected", 100, 0); //dlg->m_button1.EnableWindow(FALSE); dlg->m_connect.EnableWindow(TRUE); dlg->m_disconnect.EnableWindow(FALSE); closesocket(dlg->clisock); AfxEndThread(0); return 0; } #3.完全不知到问题在哪 非计算机类专业,当时也没认真学,现在急着解决问题,实在不知道该怎么办了,,,
MFC 客户端程序程序运行显示内存不足
最近学习MFC 在写一个屏幕抓图和传送的小程序的时候 运行客户端程序点击获取屏幕总会提示内存不足 搞了半天也不知道问题在哪里,也不知道怎么调试 求大神指教 ![图片说明](https://img-ask.csdn.net/upload/201505/09/1431163305_74079.jpg) 代码: http://pan.baidu.com/s/1CXjd0 账户里总共只有一个C币,路过的大神求别嫌弃太少啊~求帮助!!!!!
老师让做一个VC++MFC聊天程序怎么实现发送图片?
VC++MFC聊天程序,我只会实现基本的文本对话功能,怎么实现发送图片?采用的是客户端/服务器模式。希望热心人帮帮忙啊!
我写一个MFC的程序,在本机安装有oracle数据库
我有一个MFC的程序,在本机安装有oracle数据库,并且可以连接并读取oracle数据库的表,现在想把oracle数据库安装在服务器上,MFC程序互联网访问oracle数据库,这样部署可行么,意思是程序不写服务器端,直接用客户端连接数据库读取数据。
vs2010 mfc ADO连接SQL server 程序不解
![图片说明](https://img-ask.csdn.net/upload/202001/23/1579746010_73671.jpg) 各位网友, 我在网站下载的一个MFC ADO方式连接SQL server数据库代码有个地方不明白,请帮忙看看 新建一个按钮,加入如下代码: void CADOTESTDlg::OnBnClickedButton2() { // TODO: 在此添加控件通知处理程序代码 1. ADOConn conn; 2. conn.OnInitADOConn(); 3. _bstr_t vSQL; 4. vSQL = "INSERT INTO [dbtest].[dbo].[userinfo] ([username],[userpwd]) VALUES('seamanj','123')"; 5. conn.ExecuteSQL(vSQL); 6. conn.ExitConnect(); 7. conn.m_pConnection; } MFC 中debug执行完第2行,m_pConnection中就有了地址,SQL server 中执行Select * from sys.dm_exec_connections可看到新的连接,但是执行完第6行应该m_pConnection中的地址被清空,并且断开连接的,可是实际情况是一直到执行完所有的代码并结束,m_pConnection才被清空并断开连接。 哪位能帮我解释下,谢谢。 ``` void ADOConn::ExitConnect() { // 关闭记录集和连接 if (m_pRecordset != NULL) m_pRecordset->Close(); m_pConnection->Close(); // 释放环境 ::CoUninitialize(); //CString temp=_T("0"); } ``` ``` void ADOConn::OnInitADOConn() { // 初始化OLE/COM库环境 //CoInitialize(NULL)和AfxOleInit()的区别: https://blog.csdn.net/zhoubl668/article/details/4139933 ::CoInitialize(NULL); try { // 创建Connection对象 m_pConnection.CreateInstance("ADODB.Connection"); // 设置连接字符串,必须是BSTR型或者_bstr_t类型 _bstr_t strConnect = "Provider=SQLOLEDB; Server=127.0.0.1;Database=dbtest; uid=lnhv013710; pwd=013710;"; m_pConnection->Open(strConnect,"","",adModeUnknown); } // 捕捉异常 catch(_com_error e) { // 显示错误信息 AfxMessageBox(e.Description()); } } ``` ``` #pragma once class ADOConn { // 定义变量 public: //添加一个指向Connection对象的指针: _ConnectionPtr m_pConnection; //添加一个指向Recordset对象的指针: _RecordsetPtr m_pRecordset; // 定义方法 public: ADOConn(); virtual ~ADOConn(); // 初始化—连接数据库 void OnInitADOConn(); // 执行查询 _RecordsetPtr& GetRecordSet(_bstr_t bstrSQL); // 执行SQL语句,Insert Update _variant_t BOOL ExecuteSQL(_bstr_t bstrSQL); void ExitConnect(); }; ```
用Socket编写的ftp客户端无法建立连接
编写一个ftp客户端,用的MFC,CAsyncSocket类 CClientSocket类继承自CAsyncSocket类, 定义了CClientSocket m_ClientSocket; 这是按下连接“连接”按钮后的处理函数: void CChatClientDlg::OnBnClickedButton1() { // TODO: 在此添加控件通知处理程序代码 UpdateData(TRUE); char send_buf[100]; m_ClientSocket.Create(); m_ClientSocket.Connect(ServerIP,sPort); m_ListWords.AddString(_T("connecting...")); } 重写了OnConnect函数: void CClientSocket::OnConnect(int nErrorCode) { // TODO: 在此添加专用代码和/或调用基类 if (nErrorCode) { AfxMessageBox(_T("Fail to connect!Please try again!")); return; } else AfxMessageBox(_T("Successful!")); //return; } 问题来了,每次我输入ftp地址(比如ftp.zju.edu.cn)和端口号(21)并按了“连接”按钮后,要么弹出"Fail to connect!Please try again!”的对话框,要么压根没反应肿么办啊啊啊啊。。。
C++,MFC socket通信,客户端通过界面按钮可以连接服务器端,现在想把按钮去掉
如题所示,我现在想把界面上的按钮删除,把按钮响应函数移植到初始化函数中,实现界面一打开就自动连接服务器端,但是老是中断,不知道是什么原因,希望大神们指点。 //下面是Dlg.CPP里面的初始化函数,之前是放在按钮响应函数里面的,点击按钮可![图片说明](https://img-ask.csdn.net/upload/201608/16/1471348964_212637.png)连接服务器端 // TODO: 在此添加额外的初始化代码 if (m_connect) // 如果已经连接,则断开服务器 { m_connect = false; pSock = new CClientSocket; pSock->Close(); delete pSock; //m_ConPC.SetWindowTextW(_T("连接服务器")); UpdateData(false); //return; } else // 未连接,则连接服务器 { pSock = new CClientSocket(); if (!pSock->Create()) //创建套接字 { AfxMessageBox(_T("创建套接字1失败!")); //return; } } if (!pSock->Connect(_T("192.168.10.119"), 9000)) //连接服务器 { AfxMessageBox(_T("连接服务器1失败!")); //return; } else { m_connect = true; //m_ConPC.SetWindowTextW(_T("断开服务器")); UpdateData(false); } return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
MFC CSocket服务器与客户端连接问题
各位大神,一个服务器连接多个客户端,现在我想判断某一个已经定义了的CSocket对象是否与客户端已经绑定,该怎么判断?
unity + mfc socket通信问题
新手小白。。 用MFC串口通信写了一个读取GPS仪器数据的程序,想用读取的GPS数据作为位置数据控制unity中物体的运动。[Unity与C++之间进行socket通信](http://www.cnblogs.com/EricTang/archive/2013/02/22/2922666.html "") 按照这篇文章做了一遍,总是提示“服务器连接失败”。。。。 求大神相助!!!!
MFC ADO连接远程数据库问题
情景:现在S处有一台服务器上安装数据库,将端口开放给外网。另外C处开发客户端软件连接远程连接到数据库,C处客户端采用MFC+ADO编写,服务器惠普,操作系统Winser2012,数据库WinSql2012,服务器端那面是外网光纤接入,光纤接入处应该是很稳定的,然后经过路由器组起内网。 问题: 1.现在在外地安装客户端,访问数据库,每隔一段时间就会出现数据库断开连接这种错误。 2.我用tcping 连续ping S处路由器和服务器的时候,经常有很小一段时间确实会出现failed的情况,这种情况出现过后客户端到数据库的连接就断开了。 现在客户抱怨,经常C处客户端就会提示数据连接已断开,XXX数据表打开错误。。。然后就得再重启客户端。 有没有做过类似项目的朋友帮忙解答一下: 1.是该从那面网络上去着手,更换内部的路由器? 2.从软件上着手 3.其它解决方案
关于mfc的socked的问题
我刚学mfc不是很长时间,现在做了一个东西想练练手,我做了一个商家端和客户端,想实现他们之间的通讯,,怎么做呢,那个我也有socket的例子,但是我不知道在写好的商家端和客户端的代码中在哪个函数中添加,怎么添加?需要那些头文件?让商家一直监听,用户请求连接,谢谢了,这是我的全部积分
MFC SOCKET的问题!!
意思是这样的,按了连接后监听 然后收发嘛 看网上说默认是阻塞的 但是我这个客户端先是给服务端发一个数字再发一个名字 服务端接收都没问题 然后给客户端回的时候瞬间就都发完了 客户端接收就是无限的一个相同的汉字(程序就死了) 不知道是连接断了还是说这是在飞阻塞状态呢。。 为什么会这样啊 求大侠分析 服务端点了连接之后: if (!AfxSocketInit()) { return 1; } m_exit = false; CServer *aDlg = (CServer *)lParam; UINT nPort = 6000; //端口号 CSocket sockConn, serverSocket; if (!sockConn.Socket()) { aDlg->m_ListWords.AddString("创建失败"); return 1; } BOOL bOptVal = TRUE; int bOptLen = sizeof(BOOL); sockConn.SetSockOpt(SO_REUSEADDR, (void *)&bOptVal, bOptLen, SOL_SOCKET); if (!sockConn.Bind(nPort)) //绑定 { aDlg->m_ListWords.AddString("绑定失败"); return 1; } if(!sockConn.Listen(10)) //监听 可以连10个客户端 { aDlg->m_ListWords.AddString("监听失败"); return 1; } aDlg->m_ListWords.AddString("=====开始监听====="); CFootballApp *app1=(CFootballApp *)AfxGetApp(); while(!m_exit) //没有退出的话 { if(!sockConn.Accept(serverSocket)) //等待接入 { continue; } else { char recvBuf[20]; serverSocket.Receive(recvBuf,1); aDlg->m_ListWords.AddString("收到:"+recvBuf[0]); switch(recvBuf[0]) { case '1':{。。。 char sendBuf[20]; itoa(app1->c[i].cash,sendBuf,20);//转换数据类型 CString a; a.Format("%d", app1->c[i].cash); sockConn.Send(a, a.GetLength()); sockConn.Receive((void *)recvBuf, sizeof(recvBuf)); //收到确认后再继续发 。。。。。。。。。。。。。。 } serverSocket.Close(); } 。。 客户端 点连接搜索后: AfxSocketInit(); CSocket aSocket; CString strIP="127.0.0.2"; int nPort = 6000; if(!aSocket.Create()) { MessageBox("error"); return; } if(aSocket.Connect(strIP, nPort)) { char recvBuf[20] = {'\0'}; aSocket.Send("1", 1); string name; CEdit *edit=(CEdit *)GetDlgItem(IDC_NAME); //声明指向编辑框的指针 edit->GetWindowText(NAME); name=NAME.GetBuffer(0); aSocket.Send(name.c_str(), sizeof(name));//发送要查找的名字 aSocket.Receive((void *)recvBuf, sizeof(recvBuf)); if(recvBuf[0]!='!'){ //收到!代表没有找到此club mark=1; CString str; CEdit *edit=(CEdit *)GetDlgItem(IDC_cash); //首先接收到的是cash str.Format("%ch",recvBuf); edit->SetWindowText(str); aSocket.Send("ok", sizeof("ok")); //表示已接收 可继续发送 aSocket.Receive((void *)recvBuf, sizeof(recvBuf)); edit=(CEdit *)GetDlgItem(IDC_num); //接收到的是num str.Format("%ch",recvBuf); edit->SetWindowText(str); aSocket.Send("ok", sizeof("ok")); 。。。。。。。。。。。。。。。。。。。 } aSocket.Close(); }
怎样实现TCP客户端和TCP服务器端文本信息和文件的同时传输?
小弟使用winsocket api实现TCP客户端和TCP服务器端,客户端和服务器端现在可以进行文本消息 传输,就是利用send和recv发送和接收消息。我想实现文本信息和文件的同时传输,但是文件传输的时候,即使新建一个线程,文件传输代码也会调用send和recv,会与文本消息的send和recv产生冲突。应该怎样解决这个问题?现在这个模型只有一个客户端和一个服务器端。改变模型也行(比如类似QQ一样,是两个客户端通信),只要方法可行的话。谢谢!!!
MFC下socket的收到的数据是如何区别显示在不同的窗口中的呢,求大神们指导!
MFC下socket的收到的数据是如何区别显示在不同的窗口中的呢,本人是MFC,小菜鸟!求大神们指导!
MFC中服务端要在不是系统给的界面里面实现向客户端传数据怎么做
MFC中服务端要在不是系统给的界面里面实现向客户端传数据怎么做 主要是SEND函数需要一个指针 这个指针怎么赋值才能实现传值
tcp keepalive设置时需不需要客户端和服务器端都设置
现在有一个用mfc写的client和一个mfc写的server,在client端设置了keepalive后,导致了服务端出现问题,甚至导致服务端所在服务器系统的崩溃。 现在有两个问题: 1.客户端设置了keepalive,服务端要不要设置 2.上述的服务器系统崩溃的问题,是什么原因?
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私...
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小人工智障。 思路可以运用在不同地方,主要介绍的是思路。
面试官问我:什么是消息队列?什么场景需要他?用了会出现什么问题?
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图、个人联系方式和人才交流群,欢迎Star和完善 前言 消息队列在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在消息队列的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸...
8年经验面试官详解 Java 面试秘诀
作者 |胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。 Java程序员准备和投递简历的实...
究竟你适不适合买Mac?
我清晰的记得,刚买的macbook pro回到家,开机后第一件事情,就是上了淘宝网,花了500元钱,找了一个上门维修电脑的师傅,上门给我装了一个windows系统。。。。。。 表砍我。。。 当时买mac的初衷,只是想要个固态硬盘的笔记本,用来运行一些复杂的扑克软件。而看了当时所有的SSD笔记本后,最终决定,还是买个好(xiong)看(da)的。 已经有好几个朋友问我mba怎么样了,所以今天尽量客观...
MyBatis研习录(01)——MyBatis概述与入门
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis原本是apache的一个开源项目iBatis, 2010年该项目由apache software foundation 迁移到了google code并改名为MyBatis 。2013年11月MyBatis又迁移到Github。
程序员一般通过什么途径接私活?
二哥,你好,我想知道一般程序猿都如何接私活,我也想接,能告诉我一些方法吗? 上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”,还有很多读者问过我类似这样的问题。 我接的私活不算多,挣到的钱也没有多少,加起来不到 20W。说实话,这个数目说出来我是有点心虚的,毕竟太少了,大家轻喷。但我想,恰好配得上“一般程序员”这个称号啊。毕竟苍蝇再小也是肉,我也算是有经验的人了。 唾弃接私活、做外...
Python爬虫爬取淘宝,京东商品信息
小编是一个理科生,不善长说一些废话。简单介绍下原理然后直接上代码。 使用的工具(Python+pycharm2019.3+selenium+xpath+chromedriver)其中要使用pycharm也可以私聊我selenium是一个框架可以通过pip下载 pip installselenium -ihttps://pypi.tuna.tsinghua.edu.cn/simple/ ...
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
Java工作4年来应聘要16K最后没要,细节如下。。。
前奏: 今天2B哥和大家分享一位前几天面试的一位应聘者,工作4年26岁,统招本科。 以下就是他的简历和面试情况。 基本情况: 专业技能: 1、&nbsp;熟悉Sping了解SpringMVC、SpringBoot、Mybatis等框架、了解SpringCloud微服务 2、&nbsp;熟悉常用项目管理工具:SVN、GIT、MAVEN、Jenkins 3、&nbsp;熟悉Nginx、tomca...
Python爬虫精简步骤1 获取数据
爬虫,从本质上来说,就是利用程序在网上拿到对我们有价值的数据。 爬虫能做很多事,能做商业分析,也能做生活助手,比如:分析北京近两年二手房成交均价是多少?广州的Python工程师平均薪资是多少?北京哪家餐厅粤菜最好吃?等等。 这是个人利用爬虫所做到的事情,而公司,同样可以利用爬虫来实现巨大的商业价值。比如你所熟悉的搜索引擎——百度和谷歌,它们的核心技术之一也是爬虫,而且是超级爬虫。 从搜索巨头到人工...
Python绘图,圣诞树,花,爱心 | Turtle篇
每周每日,分享Python实战代码,入门资料,进阶资料,基础语法,爬虫,数据分析,web网站,机器学习,深度学习等等。 公众号回复【进群】沟通交流吧,QQ扫码进群学习吧 微信群 QQ群 1.画圣诞树 import turtle screen = turtle.Screen() screen.setup(800,600) circle = turtle.Turtle()...
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东...
破14亿,Python分析我国存在哪些人口危机!
一、背景 二、爬取数据 三、数据分析 1、总人口 2、男女人口比例 3、人口城镇化 4、人口增长率 5、人口老化(抚养比) 6、各省人口 7、世界人口 四、遇到的问题 遇到的问题 1、数据分页,需要获取从1949-2018年数据,观察到有近20年参数:LAST20,由此推测获取近70年的参数可设置为:LAST70 2、2019年数据没有放上去,可以手动添加上去 3、将数据进行 行列转换 4、列名...
web前端javascript+jquery知识点总结
1.Javascript 语法.用途 javascript 在前端网页中占有非常重要的地位,可以用于验证表单,制作特效等功能,它是一种描述语言,也是一种基于对象(Object)和事件驱动并具有安全性的脚本语言 ...
Python实战:抓肺炎疫情实时数据,画2019-nCoV疫情地图
今天,群里白垩老师问如何用python画武汉肺炎疫情地图。白垩老师是研究海洋生态与地球生物的学者,国家重点实验室成员,于不惑之年学习python,实为我等学习楷模。先前我并没有关注武汉肺炎的具体数据,也没有画过类似的数据分布图。于是就拿了两个小时,专门研究了一下,遂成此文。
听说想当黑客的都玩过这个Monyer游戏(1~14攻略)
第零关 进入传送门开始第0关(游戏链接) 请点击链接进入第1关: 连接在左边→ ←连接在右边 看不到啊。。。。(只能看到一堆大佬做完的留名,也能看到菜鸡的我,在后面~~) 直接fn+f12吧 &lt;span&gt;连接在左边→&lt;/span&gt; &lt;a href="first.php"&gt;&lt;/a&gt; &lt;span&gt;←连接在右边&lt;/span&gt; o...
在家远程办公效率低?那你一定要收好这个「在家办公」神器!
相信大家都已经收到国务院延长春节假期的消息,接下来,在家远程办公可能将会持续一段时间。 但是问题来了。远程办公不是人在电脑前就当坐班了,相反,对于沟通效率,文件协作,以及信息安全都有着极高的要求。有着非常多的挑战,比如: 1在异地互相不见面的会议上,如何提高沟通效率? 2文件之间的来往反馈如何做到及时性?如何保证信息安全? 3如何规划安排每天工作,以及如何进行成果验收? ...... ...
作为一个程序员,内存和磁盘的这些事情,你不得不知道啊!!!
截止目前,我已经分享了如下几篇文章: 一个程序在计算机中是如何运行的?超级干货!!! 作为一个程序员,CPU的这些硬核知识你必须会! 作为一个程序员,内存的这些硬核知识你必须懂! 这些知识可以说是我们之前都不太重视的基础知识,可能大家在上大学的时候都学习过了,但是嘞,当时由于老师讲解的没那么有趣,又加上这些知识本身就比较枯燥,所以嘞,大家当初几乎等于没学。 再说啦,学习这些,也看不出来有什么用啊!...
渗透测试-灰鸽子远控木马
木马概述 灰鸽子( Huigezi),原本该软件适用于公司和家庭管理,其功能十分强大,不但能监视摄像头、键盘记录、监控桌面、文件操作等。还提供了黑客专用功能,如:伪装系统图标、随意更换启动项名称和表述、随意更换端口、运行后自删除、毫无提示安装等,并采用反弹链接这种缺陷设计,使得使用者拥有最高权限,一经破解即无法控制。最终导致被黑客恶意使用。原作者的灰鸽子被定义为是一款集多种控制方式于一体的木马程序...
Python:爬取疫情每日数据
前言 目前每天各大平台,如腾讯、今日头条都会更新疫情每日数据,他们的数据源都是一样的,主要都是通过各地的卫健委官网通报。 以全国、湖北和上海为例,分别为以下三个网站: 国家卫健委官网:http://www.nhc.gov.cn/xcs/yqtb/list_gzbd.shtml 湖北卫健委官网:http://wjw.hubei.gov.cn/bmdt/ztzl/fkxxgzbdgrfyyq/xxfb...
这个世界上人真的分三六九等,你信吗?
偶然间,在知乎上看到一个问题 一时间,勾起了我深深的回忆。 以前在厂里打过两次工,做过家教,干过辅导班,做过中介。零下几度的晚上,贴过广告,满脸、满手地长冻疮。 再回首那段岁月,虽然苦,但让我学会了坚持和忍耐。让我明白了,在这个世界上,无论环境多么的恶劣,只要心存希望,星星之火,亦可燎原。 下文是原回答,希望能对你能有所启发。 如果我说,这个世界上人真的分三六九等,...
B 站上有哪些很好的学习资源?
哇说起B站,在小九眼里就是宝藏般的存在,放年假宅在家时一天刷6、7个小时不在话下,更别提今年的跨年晚会,我简直是跪着看完的!! 最早大家聚在在B站是为了追番,再后来我在上面刷欧美新歌和漂亮小姐姐的舞蹈视频,最近两年我和周围的朋友们已经把B站当作学习教室了,而且学习成本还免费,真是个励志的好平台ヽ(.◕ฺˇд ˇ◕ฺ;)ノ 下面我们就来盘点一下B站上优质的学习资源: 综合类 Oeasy: 综合...
雷火神山直播超两亿,Web播放器事件监听是怎么实现的?
Web播放器解决了在手机浏览器和PC浏览器上播放音视频数据的问题,让视音频内容可以不依赖用户安装App,就能进行播放以及在社交平台进行传播。在视频业务大数据平台中,播放数据的统计分析非常重要,所以Web播放器在使用过程中,需要对其内部的数据进行收集并上报至服务端,此时,就需要对发生在其内部的一些播放行为进行事件监听。 那么Web播放器事件监听是怎么实现的呢? 01 监听事件明细表 名...
3万字总结,Mysql优化之精髓
本文知识点较多,篇幅较长,请耐心学习 MySQL已经成为时下关系型数据库产品的中坚力量,备受互联网大厂的青睐,出门面试想进BAT,想拿高工资,不会点MySQL优化知识,拿offer的成功率会大大下降。 为什么要优化 系统的吞吐量瓶颈往往出现在数据库的访问速度上 随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢 数据是存放在磁盘上的,读写速度无法和内存相比 如何优化 设计...
Python新型冠状病毒疫情数据自动爬取+统计+发送报告+数据屏幕(三)发送篇
今天介绍的项目是使用 Itchat 发送统计报告 项目功能设计: 定时爬取疫情数据存入Mysql 进行数据分析制作疫情报告 使用itchat给亲人朋友发送分析报告 基于Django做数据屏幕 使用Tableau做数据分析 来看看最终效果 目前已经完成,预计2月12日前更新 使用 itchat 发送数据统计报告 itchat 是一个基于 web微信的一个框架,但微信官方并不允许使用这...
作为程序员的我,大学四年一直自学,全靠这些实用工具和学习网站!
我本人因为高中沉迷于爱情,导致学业荒废,后来高考,毫无疑问进入了一所普普通通的大学,实在惭愧???? 我又是那么好强,现在学历不行,没办法改变的事情了,所以,进入大学开始,我就下定决心,一定要让自己掌握更多的技能,尤其选择了计算机这个行业,一定要多学习技术。 在进入大学学习不久后,我就认清了一个现实:我这个大学的整体教学质量和学习风气,真的一言难尽,懂的人自然知道怎么回事? 怎么办?我该如何更好的提升自...
粒子群算法求解物流配送路线问题(python)
1.Matlab实现粒子群算法的程序代码:https://www.cnblogs.com/kexinxin/p/9858664.html matlab代码求解函数最优值:https://blog.csdn.net/zyqblog/article/details/80829043 讲解通俗易懂,有数学实例的博文:https://blog.csdn.net/daaikuaichuan/article/...
教你如何编写第一个简单的爬虫
很多人知道爬虫,也很想利用爬虫去爬取自己想要的数据,那么爬虫到底怎么用呢?今天就教大家编写一个简单的爬虫。 下面以爬取笔者的个人博客网站为例获取第一篇文章的标题名称,教大家学会一个简单的爬虫。 第一步:获取页面 #!/usr/bin/python # coding: utf-8 import requests #引入包requests link = "http://www.santostang....
前端JS初级面试题二 (。•ˇ‸ˇ•。)老铁们!快来瞧瞧自己都会了么
1. 传统事件绑定和符合W3C标准的事件绑定有什么区别? 传统事件绑定 &lt;div onclick=""&gt;123&lt;/div&gt; div1.onclick = function(){}; &lt;button onmouseover=""&gt;&lt;/button&gt; 注意: 如果给同一个元素绑定了两次或多次相同类型的事件,那么后面的绑定会覆盖前面的绑定 (不支持DOM事...
相关热词 c# 识别回车 c#生成条形码ean13 c#子控制器调用父控制器 c# 写大文件 c# 浏览pdf c#获取桌面图标的句柄 c# list反射 c# 句柄 进程 c# 倒计时 线程 c# 窗体背景色
立即提问

相似问题

1
远程关机客户端无法循环判断接收的信息
1
利用MFC写一个Tcp程序,基于事件选择机制建立一个回射服务器(直接把收到的客户端消息发回给客户端)
2
UDP聊天程序MFC编程如何使用多线程
3
vc用mfc连接access数据库做了一个应用程序,但是每次打开程序都要连接一次数据库才可以用
7
C++MFC Socket线程接受到手机端的信息之后如何通过判断这些信息,去执行主线程的函数。
3
关于Socket通讯,不仅仅局域网内的通讯问题
3
网络编程关于如何监测tcp连接
3
C++,MFC socket通信,客户端通过界面按钮可以连接服务器端,现在想把按钮去掉
1
mfc做导航时的地图是作为背景图片还是什么,我这里有一个源程序可是看不懂他是如何实现的
3
mfc连接ado数据库成功,但插入记录时程序停止运行怎么办!
1
关于MFC编写的SMTP邮件服务器与outlook邮件客户端交互的问题
2
MFC对话框程序ADO连接数据库,QueryInterface能否用在非对话框类中
1
在使用possage函数时 错误代码为2 (系统找不到指定文件)mfc即时的聊天工具
2
VC++2010 MFC Socket的一个小问题。希望各路大神帮忙解答一下。谢谢。
3
请教 VS2013 MFC 的数据库连接出错。
2
如何把CPU和内存的使用率显示在一个MFC做成的软件的界面上?
2
MFC TCP聊天程序,客户端为什么接受不到服务器发送的信息
2
MFC开发,client端重连失败
0
MFC CSocket 在VS2010下客户端只能接收一次服务器的返回信息,而且客户端卡死了
1
MFC CSocket 在VS2010下 客户端只能接收一次服务器的返回信息,并且之后的代码不能执行