用VC++ API模式编写一个基于IP/TCP协议的服务器端与客户端通信的程序 用VC++ API模式编写一个基于IP/TCP协议的服务器端与客户端通信的程序 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 客户端:#pragma comment(lib,"ws2_32.lib")#include<winsock2.h>#include<stdio.h>void main(){ WSADATA wsaData; WSAStartup(MAKEWORD(2,2),&wsaData);SOCKET connSock=socket(AF_INET,SOCK_STREAM,0);SOCKADDR_IN servAddr;servAddr.sin_family=AF_INET;servAddr.sin_port=htons(9878);servAddr.sin_addr.s_addr=inet_addr("127.0.0.1");connect(connSock,(SOCKADDR*)&servAddr,sizeof(SOCKADDR_IN));char buf[11];recv(connSock,buf,11,0);printf("%s",buf);}服务器端:#pragma comment(lib,"ws2_32.lib")#include<winsock2.h>void main(){ WSADATA wsaData; WSAStartup(MAKEWORD(2,2),&wsaData);SOCKET servSock,cliSock;SOCKADDR_IN servAddr;servAddr.sin_family=AF_INET;servAddr.sin_port=htons(9878);servAddr.sin_addr.s_addr=htonl(INADDR_ANY);servSock=socket(AF_INET,SOCK_STREAM,0);bind(servSock,(SOCKADDR*)&servAddr,sizeof(SOCKADDR_IN));listen(servSock,5);while(true){ cliSock=accept(servSock,NULL,NULL); send(cliSock,"hello world",11,0);}} #include<winsock.h>#include"resource.h"#include"Chat_RoomC.h"int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance, LPSTR lpCmdLine,int nCmdShow){ DialogBox(hInstance,(LPCTSTR)"DIALOG1",NULL,(DLGPROC)Hostname_ipDlgPro); return(TRUE);}BOOL APIENTRY Hostname_ipDlgPro(HWND hDlg,UINT message, WPARAM wParam,LPARAM lParam){ switch(message) { case WM_INITDIALOG: WSA_return=WSAStartup(0x0002,&WSAData); if(WSA_return!=0) { MessageBox(NULL,"初始化失败!","警告!",MB_OK); WSACleanup(); } if(client_hSocket!=0) { closesocket(client_hSocket); client_hSocket=0; } if(client_hSocket==0) { if((client_hSocket=socket(AF_INET,SOCK_DGRAM,0))==SOCKET_ERROR) MessageBox(NULL,"建立套接字失败!","警告!",MB_OK); } return TRUE; case WM_COMMAND: switch(LOWORD(wParam)) { case IDC_IPADDRESS: if(HIWORD(wParam)==EN_CHANGE) { GetDlgItemText(hDlg,IDC_IPADDRESS,IP_String,20); } break; case IDC_INPUTTEXT: if(HIWORD(wParam)==EN_CHANGE) { GetDlgItemText(hDlg,IDC_INPUTTEXT,Input_Text,256); } break; case IDC_SEND: client_addr.sin_family=AF_INET; client_addr.sin_addr.S_un.S_addr=inet_addr(IP_String); client_uPort=GetDlgItemInt(hDlg,IDC_PORTTEXT,&bErr,TRUE); client_addr.sin_port=htons((u_short)client_uPort); sendto(client_hSocket,Input_Text,256,0,(LPSOCKADDR)&client_addr,sizeof(client_addr)); break; case IDCANCEL: closesocket(client_hSocket); WSACleanup(); EndDialog(hDlg,TRUE); return(TRUE); } } return(FALSE);} #include<winsock.h>#include"resource.h"#include"Chat_RoomS.h"int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance, LPSTR lpCmdLine,int nCmdShow){ DialogBox(hInstance,(LPCTSTR)"DIALOG1",NULL,(DLGPROC)Hostname_ipDlgPro); return(TRUE);}BOOL APIENTRY Hostname_ipDlgPro(HWND hDlg,UINT message, WPARAM wParam,LPARAM lParam){ switch(message) { case WM_INITDIALOG: return(TRUE); case WM_COMMAND: switch(LOWORD(wParam)) { case IDC_SETSERVER: WSA_return=WSAStartup(0x0002,&WSAData); if(WSA_return!=0) { MessageBox(NULL,"初始化失败!","警告!",MB_OK); WSACleanup(); } if(server_hSocket!=0) { closesocket(server_hSocket); server_hSocket=0; } if(server_hSocket==0) { if((server_hSocket=socket(AF_INET,SOCK_DGRAM,0))==SOCKET_ERROR) MessageBox(NULL,"建立套接字失败!","警告!",MB_OK); } server_addr.sin_family=AF_INET; server_addr.sin_addr.S_un.S_addr=INADDR_ANY; server_uPort=GetDlgItemInt(hDlg,IDC_PORTUINT,&server_bErr,TRUE); server_addr.sin_port=htons((u_short)server_uPort); if(bind(server_hSocket,(LPSOCKADDR)&server_addr,sizeof(server_addr))==SOCKET_ERROR) MessageBox(NULL,"绑定端口失败!","警告",MB_OK); return(TRUE); case IDC_RECEIVE: recvfrom(server_hSocket,Output_Text,256,0,(LPSOCKADDR)&server_addr,&fromlen); SetDlgItemText(hDlg,IDC_INPUTTEXT,Output_Text); return(TRUE); case IDCANCEL: closesocket(server_hSocket); WSACleanup(); EndDialog(hDlg,TRUE); return(TRUE); } } return(FALSE);} 呵呵,来晚了楼主可以到www.vckbase.com上面有好多的基本例子 先了解socket通信的服务端和客户端的过程 服务器端和客户端都有一个固定格式的,按照来做就行了。比如server端: socket(), bind(), listen(), accept(), send or recv写个简单的网络通信程序还是比较简单的:) 使用CSortListControl类给list添加数据 宏定义 用条件编译方法 在dll里怎么用GetPrivateProfileString读取ini的内容? 高薪征集一款软件 CStatic字体颜色设置问题 编译STL时遇到这样的错误,该如何解决? listctrl的小问题,快来拿分啊~ 3:关于在vc下如何调用.tlb资源? 关于FTPConnection的问题 对话框焦点问题 有人能给一点关于绘图中用的剪裁的概念么 关于CListCtrl中的GetEditControl()
#pragma comment(lib,"ws2_32.lib")
#include<winsock2.h>
#include<stdio.h>
void main()
{
WSADATA wsaData;
WSAStartup(MAKEWORD(2,2),&wsaData);
SOCKET connSock=socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN servAddr;
servAddr.sin_family=AF_INET;
servAddr.sin_port=htons(9878);
servAddr.sin_addr.s_addr=inet_addr("127.0.0.1");connect(connSock,(SOCKADDR*)&servAddr,sizeof(SOCKADDR_IN));
char buf[11];
recv(connSock,buf,11,0);
printf("%s",buf);
}服务器端:#pragma comment(lib,"ws2_32.lib")
#include<winsock2.h>
void main()
{
WSADATA wsaData;
WSAStartup(MAKEWORD(2,2),&wsaData);
SOCKET servSock,cliSock;
SOCKADDR_IN servAddr;
servAddr.sin_family=AF_INET;
servAddr.sin_port=htons(9878);
servAddr.sin_addr.s_addr=htonl(INADDR_ANY);
servSock=socket(AF_INET,SOCK_STREAM,0);
bind(servSock,(SOCKADDR*)&servAddr,sizeof(SOCKADDR_IN));
listen(servSock,5);
while(true)
{
cliSock=accept(servSock,NULL,NULL);
send(cliSock,"hello world",11,0);
}
}
#include"resource.h"
#include"Chat_RoomC.h"int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
LPSTR lpCmdLine,int nCmdShow)
{
DialogBox(hInstance,(LPCTSTR)"DIALOG1",NULL,(DLGPROC)Hostname_ipDlgPro);
return(TRUE);
}
BOOL APIENTRY Hostname_ipDlgPro(HWND hDlg,UINT message,
WPARAM wParam,LPARAM lParam)
{
switch(message)
{
case WM_INITDIALOG:
WSA_return=WSAStartup(0x0002,&WSAData);
if(WSA_return!=0)
{
MessageBox(NULL,"初始化失败!","警告!",MB_OK);
WSACleanup();
}
if(client_hSocket!=0)
{
closesocket(client_hSocket);
client_hSocket=0;
}
if(client_hSocket==0)
{
if((client_hSocket=socket(AF_INET,SOCK_DGRAM,0))==SOCKET_ERROR)
MessageBox(NULL,"建立套接字失败!","警告!",MB_OK);
}
return TRUE; case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDC_IPADDRESS:
if(HIWORD(wParam)==EN_CHANGE)
{
GetDlgItemText(hDlg,IDC_IPADDRESS,IP_String,20);
}
break;
case IDC_INPUTTEXT:
if(HIWORD(wParam)==EN_CHANGE)
{
GetDlgItemText(hDlg,IDC_INPUTTEXT,Input_Text,256);
}
break;
case IDC_SEND:
client_addr.sin_family=AF_INET;
client_addr.sin_addr.S_un.S_addr=inet_addr(IP_String);
client_uPort=GetDlgItemInt(hDlg,IDC_PORTTEXT,&bErr,TRUE);
client_addr.sin_port=htons((u_short)client_uPort);
sendto(client_hSocket,Input_Text,256,0,(LPSOCKADDR)&client_addr,sizeof(client_addr));
break;
case IDCANCEL:
closesocket(client_hSocket);
WSACleanup();
EndDialog(hDlg,TRUE);
return(TRUE);
}
}
return(FALSE);
}
#include"resource.h"
#include"Chat_RoomS.h"int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
LPSTR lpCmdLine,int nCmdShow)
{
DialogBox(hInstance,(LPCTSTR)"DIALOG1",NULL,(DLGPROC)Hostname_ipDlgPro);
return(TRUE);
}
BOOL APIENTRY Hostname_ipDlgPro(HWND hDlg,UINT message,
WPARAM wParam,LPARAM lParam)
{ switch(message)
{
case WM_INITDIALOG:
return(TRUE); case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDC_SETSERVER:
WSA_return=WSAStartup(0x0002,&WSAData);
if(WSA_return!=0)
{
MessageBox(NULL,"初始化失败!","警告!",MB_OK);
WSACleanup();
}
if(server_hSocket!=0)
{
closesocket(server_hSocket);
server_hSocket=0;
}
if(server_hSocket==0)
{
if((server_hSocket=socket(AF_INET,SOCK_DGRAM,0))==SOCKET_ERROR)
MessageBox(NULL,"建立套接字失败!","警告!",MB_OK);
}
server_addr.sin_family=AF_INET;
server_addr.sin_addr.S_un.S_addr=INADDR_ANY;
server_uPort=GetDlgItemInt(hDlg,IDC_PORTUINT,&server_bErr,TRUE);
server_addr.sin_port=htons((u_short)server_uPort); if(bind(server_hSocket,(LPSOCKADDR)&server_addr,sizeof(server_addr))==SOCKET_ERROR)
MessageBox(NULL,"绑定端口失败!","警告",MB_OK);
return(TRUE);
case IDC_RECEIVE:
recvfrom(server_hSocket,Output_Text,256,0,(LPSOCKADDR)&server_addr,&fromlen);
SetDlgItemText(hDlg,IDC_INPUTTEXT,Output_Text);
return(TRUE);
case IDCANCEL:
closesocket(server_hSocket);
WSACleanup();
EndDialog(hDlg,TRUE);
return(TRUE);
}
}
return(FALSE);
}
比如server端: socket(), bind(), listen(), accept(), send or recv
写个简单的网络通信程序还是比较简单的:)