18,356
社区成员
发帖
与我相关
我的任务
分享
void CTCPDlg::OnBnClickedOk() //发送
{
if (m_clientSocket.m_bConnected)//客户端
{
m_clientSocket.m_nLength=MsgEdit.GetWindowText
(m_clientSocket.m_szBuffer, sizeof(m_clientSocket.m_szBuffer));
m_clientSocket.AsyncSelect(FD_WRITE);
MsgEdit.SetWindowText("");
}
else if(m_srvrSocket.m_bConnected)//服务器
{
m_srvrSocket.m_nLength=MsgEdit.GetWindowText
(m_srvrSocket.m_szBuffer, sizeof(m_srvrSocket.m_szBuffer));
/*int ret = m_srvrSocket.Send(m_srvrSocket.m_szBuffer, m_srvrSocket.m_nLength);
if(ret == SOCKET_ERROR)
if(GetLastError()==WSAEWOULDBLOCK)
AfxMessageBox("The socket is marked as nonblocking and the requested operation would block");
else if(GetLastError()==WSAEINVAL)
AfxMessageBox("The socket has not been bound with Bind");
else if(GetLastError()==WSAESHUTDOWN)
AfxMessageBox("The socket has been shut down");
else if(GetLastError()==WSAENOTCONN)
AfxMessageBox("The socket is not connected");*/
m_srvrSocket.AsyncSelect(FD_WRITE);
MsgEdit.SetWindowText("");
}
else
AfxMessageBox("Not Connected!");
}
void MySock::OnSend(int nErrorCode)
{
Send(m_szBuffer,m_nLength,0);
m_nLength=0;
memset(m_szBuffer,0,sizeof(m_szBuffer));
//继续提请一个“读”的网络事件,接收Server消息
AsyncSelect(FD_READ);
CAsyncSocket::OnSend(nErrorCode);
}
#include <Winsock.h>
#include <windows.h>
#include <stdio.h>
#pragma comment(lib,"wsock32.lib")
#define PORT 2000
SOCKET sock,sock1; // 1.建立一个监听端口 2.收到一个请求端口
sockaddr_in ServerAddr;
char buff[80];
DWORD WINAPI RECVWorkerThread(LPVOID pParam);
DWORD WINAPI SENDWorkerThread(LPVOID pParam);
int main()
{
DWORD dwREVEThreadId,dwSENDThreadId;
WSADATA WSAData;
WSAStartup(MAKEWORD(2,2),&WSAData);
ServerAddr.sin_family=AF_INET;
ServerAddr.sin_addr.s_addr=htonl(INADDR_ANY);
ServerAddr.sin_port=htons(PORT);
sock=socket(AF_INET,SOCK_STREAM,0);
bind(sock,(struct sockaddr FAR *)&ServerAddr,sizeof(ServerAddr));
int Addrlen;
Addrlen=sizeof(sockaddr_in);
listen(sock,5);
printf("I am server...\nlistening...\n");
HANDLE RECVThreadHandle = CreateThread(NULL, 0, RECVWorkerThread, NULL, 0, &dwREVEThreadId);
HANDLE SENDThreadHandle = CreateThread(NULL, 0, SENDWorkerThread, NULL, 0, &dwSENDThreadId);
WaitForSingleObject(SENDThreadHandle, INFINITE);
CloseHandle (SENDThreadHandle);
WaitForSingleObject(RECVThreadHandle, INFINITE);
CloseHandle (RECVThreadHandle);
return 0;
}
DWORD WINAPI RECVWorkerThread(LPVOID lpParam)
{
int Addrlen=sizeof(sockaddr_in);
for (;;)
{
sock1=accept(sock,(struct sockaddr FAR *)&ServerAddr,&Addrlen);
for (;;)
{
memset(buff,0,80);
if (recv(sock1,buff,80,0)<=0)
{
break;
}
printf(buff);
printf("\n");
}
}
}
DWORD WINAPI SENDWorkerThread(LPVOID lpParam)
{
for (;;)
{
printf("please input your message:(0----exit.)\n");
memset(buff,0,80);
gets(buff);
send(sock1,buff,strlen(buff),0);
}
return 0;
}