在服务器和客户端之间建立两个socket连接,第一个连接能够成功建立,第二个连接返回错误10060,这是为什么呢??
解决方案 »
- USB摄像头数据采集
- 新手对COM的理解
- 对话框数据实时更新
- 请教google talk代码(100分在线等!)
- 请教!?我在学习深入浅出mfc(第二版)其中的六大技术仿真中的Frame3,我敲进去后,发现有问题!不知道原因,请高手帮忙解释!?
- CPropertySheet中,切换Page时对CPropertySheet触发什么事件?
- 在这样的类型编译器报错 如何转换 Class CString' to 'const unsigned short *'
- 继承CDialog类,生成一个新类,然后被其他的dialog继承
- 关于图片打印求助,搞分数
- 长沙的VC高手,有谁愿意当我的老师吗?
- vc基础问题!很基础,关于字符赋值!!!
- 提取int到数组
服务端:
第一个Socket:
unsigned int StartMsg(LPVOID lParam)
{
// AfxMessageBox("startmsg start"); WORD wVersionRequested;
WSADATA wsaData;
int err; wVersionRequested = MAKEWORD(2, 0);
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
return 1;
} CRadasaveDlg *pDlg = (CRadasaveDlg *)lParam;
SOCKET SocketMsg, ServerMsg;
sockaddr_in ServerMsgaddr;
memset(&ServerMsgaddr, 0, sizeof(ServerMsgaddr));
SocketMsg = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (SocketMsg == INVALID_SOCKET) {
char szError[256] = {0};
DWORD ErrorCode = GetLastError();
sprintf(szError, "Create failed: %s\n", ErrorCode);
AfxMessageBox(szError);
return 1;
}
sockaddr_in SocketMsgaddr;
memset(&SocketMsgaddr,0,sizeof(SocketMsgaddr));
SocketMsgaddr.sin_family = AF_INET;
SocketMsgaddr.sin_addr.s_addr = htonl(INADDR_ANY);
SocketMsgaddr.sin_port = htons((u_short)nPort2);
if (bind(SocketMsg, (sockaddr *)&SocketMsgaddr, sizeof(SocketMsgaddr)) == SOCKET_ERROR) {
char szError[256] = {0};
sprintf(szError, "Bind Faild: %d", GetLastError());
AfxMessageBox(szError);
return 1;
}
if (listen(SocketMsg,1) == SOCKET_ERROR) {
char szError[256] = {0};
sprintf(szError, "Listen Faild: %d", GetLastError());
AfxMessageBox(szError);
return 1;
}
ServerMsg = accept(SocketMsg, (sockaddr *)&ServerMsgaddr, 0);
if(ServerMsg == INVALID_SOCKET)
{
}
else
{
while (1) {
char szRecv[256] = {0};
recv(ServerMsg, szRecv, 256, 0);//receive client command
if (strcmp(szRecv, warmup) == 0) {
// pDlg->OnBtcsh();
}
else if(strcmp(szRecv, stop) == 0){
AfxMessageBox("Send over!");
m_exit = true;
}
else if (strcmp(szRecv, sendmsg) == 0){
AfxMessageBox("Send begin!");
m_exit = false;
}
else if(strcmp(szRecv, pause) == 0){
// pDlg->OnBtcsh();
}
else if (strcmp(szRecv, autoset) == 0) {
// pDlg->OnBttune();
}
} } return 0;
}
第二个Socket:
unsigned int StartServer(LPVOID lParam)
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD(2, 0);
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
return 1;
} m_exit = false;
CRadasaveDlg *aDlg = (CRadasaveDlg *)lParam;
//Socket----------------------------------------- SOCKET aSocket, ServerSocket; sockaddr_in serverSockaddr;
memset(&serverSockaddr, 0, sizeof(serverSockaddr)); aSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (aSocket == INVALID_SOCKET) {
char szError[256] = {0};
DWORD ErrorCode = GetLastError();
sprintf(szError, "Create failed: %s\n", ErrorCode);
AfxMessageBox(szError);
return 1;
} sockaddr_in aSockaddr;
memset(&aSockaddr,0,sizeof(aSockaddr));
aSockaddr.sin_family = AF_INET;
aSockaddr.sin_addr.s_addr = htonl(INADDR_ANY);
aSockaddr.sin_port = htons((u_short)nPort);
if (bind(aSocket, (sockaddr *)&aSockaddr, sizeof(aSockaddr)) == SOCKET_ERROR) {
char szError[256] = {0};
sprintf(szError, "Bind Faild: %d", GetLastError());
AfxMessageBox(szError);
return 1;
} if (listen(aSocket,1) == SOCKET_ERROR) {
char szError[256] = {0};
sprintf(szError, "Listen Faild: %d", GetLastError());
AfxMessageBox(szError);
return 1;
}
aDlg->SendMessage(WM_MY_DATACONNECT);
while(!m_exit)
{
ServerSocket = accept(aSocket, (sockaddr *)&serverSockaddr, 0);
if(ServerSocket == INVALID_SOCKET)
{
continue;
}
else
{
char str[] = "";
if (strcmp(buf,str) != 0) {
send(ServerSocket,buf,2022,0); //send data
}
else{
continue;
}
}
}
return 0;
}客户端:
第一个Socket:
AfxSocketInit();
CString strIP = "169.254.1.28";
if (!socketMsg.Create()) {
char szMsg[1024] = {0};
sprintf(szMsg, "create faild: %d", socketMsg.GetLastError());
AfxMessageBox(szMsg);
}
int nPort2 = 7000;
if(socketMsg.Connect(strIP,nPort2))
{
}
else
{
char szMsg[1024] = {0};
sprintf(szMsg, "connect faild: %d", socketMsg.GetLastError());
AfxMessageBox(szMsg);
}
第二个Socket:
unsigned int StartClient(LPVOID lParam)
{
CSocket aSocket;
AfxSocketInit();
CString strIP = "169.254.1.28"; CClientDlg* aDlg = (CClientDlg*)lParam; if(!aSocket.Create())
{
char szMsg[1024] = {0};
sprintf(szMsg, "create faild: %d", aSocket.GetLastError());
AfxMessageBox(szMsg);
return 1;
}
int nPort = 6666;
if(aSocket.Connect(strIP, nPort))
{
while(!m_exit){
char buf[2022] = {0}; int RecValue = aSocket.Receive(buf, 2022);
if (RecValue == 0) {
AfxMessageBox("connect is close;");
}
else if (RecValue == SOCKET_ERROR) {
char szMsg[1024] = {0};
sprintf(szMsg, "Recv faild: %d", aSocket.GetLastError());
AfxMessageBox(szMsg); return 1;
}
else{
//将接收到的文件写到新建的文件中去
Recefile.write(buf,2022);
}
}
}
else
{
char szMsg[1024] = {0};
sprintf(szMsg, "connect faild: %d", aSocket.GetLastError());
AfxMessageBox(szMsg);
return 1;
}
return 0;
}
得开线程监听
得开线程监听
-----------------------
server的两个socket都是在线程里面开的,只有客户端是一个开在主线程,一个开在子线程里面。
while (1)
{
clientsockt = accept();
....
}
你只 accept 一次,当然收不到第2次连接
你不是一个服务器,两个客户端吗?
不管你几个服务器, 服务器到要这样写
while (1)
{
ClientSocket = accept();
}