简单的网络通信(包括服务器和客户端) 小弟是个菜鸟,刚刚接触VC请各位高手大哥多多帮忙呀! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 先在网上找个例子看看吧,www.vckbase.com上有不少 //////////////////////////////////////////// 服务端代码//////////////////////////////////////////#include <winsock.h> //包含头文件#pragma comment(lib, "ws2_32.lib") //需要连接winsock库void server(){ struct sockaddr_in sin, addr; int client, addrlen; WSADATA wsadata; SOCKET m_sock; int m_Port = 2000; //服务端监听的端口号 //初始化winsock WSAStartup(MAKEWORD(1, 1), &wsadata); m_sock = socket(AF_INET, SOCK_STREAM, 0); if (m_sock == INVALID_SOCKET) { return; } sin.sin_family = AF_INET; sin.sin_addr.s_addr = INADDR_ANY; sin.sin_port = htons(m_Port); if (bind(m_sock, (struct sockaddr *)&sin, sizeof(struct sockaddr_in)) == SOCKET_ERROR) { closesocket(m_sock); m_sock = INVALID_SOCKET; return; } if (listen(m_sock, SOMAXCONN) == SOCKET_ERROR) { closesocket(m_sock); m_sock = INVALID_SOCKET; return; } while (1) { addrlen = sizeof(struct sockaddr_in); client = accept(m_sock, (struct sockaddr *)&addr, &addrlen); if (client == INVALID_SOCKET) { continue; } //启动线程,处理与客户端的通信 if (_beginthread(ThreadStart, 0, (void *)client) == -1) { closesocket(client); } } closesocket(m_sock); m_sock = INVALID_SOCKET; WSACleanup();}//线程函数void ThreadStart(void *arg){ int client = (int)arg; int n = 0, r = 0; //此处client就是与客户端通信的socket //可以用recv()/send()接收或发送数据 //关闭socket, 退出线程函数, 线程结束 closesocket(client);}//////////////////////////////////////////// 客户端代码//////////////////////////////////////////#include <winsock.h> //包含头文件#pragma comment(lib, "ws2_32.lib") //需要连接winsock库void client(char *szHost, int nPort){ struct hostent *he; unsigned long iaddr; struct sockaddr_in m_HostAddr; SOCKET sock; WSADATA wsadata; //初始化winsock WSAStartup(MAKEWORD(1, 1), &wsadata); //以下代码解释服务器地址 memset(&m_HostAddr, 0, sizeof(m_HostAddr)); iaddr = inet_addr(szHost); if (iaddr != INADDR_NONE) { m_HostAddr.sin_addr.s_addr = iaddr; } else { he = gethostbyname(szHost); if (he == NULL) return; memcpy(&(m_HostAddr.sin_addr), he->h_addr, he->h_length); } m_HostAddr.sin_family = AF_INET; m_HostAddr.sin_port = htons(nPort); /////////////////// sock = socket(AF_INET, SOCK_STREAM, 0); if (sock == INVALID_SOCKET) { return; } //设置接收的timeout, 可以不设 int opt = 2000; if (setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, (char *)&opt, sizeof(opt)) == SOCKET_ERROR) { closesocket(sock); return; } //连接服务端 if (connect(sock, (const struct sockaddr *)&m_HostAddr, sizeof(m_HostAddr)) == SOCKET_ERROR) { closesocket(sock); return; } //发送或接收数据 send(sock, "hello", 5, 0); //关闭socket closesocket(sock); WSACleanup();} 我把以前写的一个例子放进www.tom.com的信箱里了,VC.NET2003写的,用户名:mycsdn2003,密码:111111,标题是"数据传输.你看看吧,我一般用这个信箱做交流用. http://www.vckbase.com/code/listcode.asp?mclsid=9&sclsid=901 如何做一个用.torrent文件下载东西的BT下载器? 请问如让Edit,根据输入的内容,自动调整大小 字符串转16进制 问题 ADO与ACCESS的问题 怎么样能让菜单里的一项比较醒目呢? 请教一个关于unsigned long的问题 高分求助:如何自动关闭操作系统弹出的消息提示框。 关于HBRUSH CSatcctlDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) ?? 不是高手就不要进(200分问题) 显示模式对话框,为什么主界面不动了 VC/MFC连库的简单问题? 典型线程问题,急救!!!
// 服务端代码
//////////////////////////////////////////
#include <winsock.h> //包含头文件
#pragma comment(lib, "ws2_32.lib") //需要连接winsock库
void server()
{
struct sockaddr_in sin, addr;
int client, addrlen;
WSADATA wsadata;
SOCKET m_sock;
int m_Port = 2000; //服务端监听的端口号 //初始化winsock
WSAStartup(MAKEWORD(1, 1), &wsadata); m_sock = socket(AF_INET, SOCK_STREAM, 0);
if (m_sock == INVALID_SOCKET)
{
return;
} sin.sin_family = AF_INET;
sin.sin_addr.s_addr = INADDR_ANY;
sin.sin_port = htons(m_Port); if (bind(m_sock, (struct sockaddr *)&sin,
sizeof(struct sockaddr_in)) == SOCKET_ERROR)
{
closesocket(m_sock);
m_sock = INVALID_SOCKET;
return;
} if (listen(m_sock, SOMAXCONN) == SOCKET_ERROR)
{
closesocket(m_sock);
m_sock = INVALID_SOCKET;
return;
} while (1)
{
addrlen = sizeof(struct sockaddr_in);
client = accept(m_sock, (struct sockaddr *)&addr, &addrlen);
if (client == INVALID_SOCKET)
{
continue;
} //启动线程,处理与客户端的通信
if (_beginthread(ThreadStart, 0, (void *)client) == -1)
{
closesocket(client);
}
} closesocket(m_sock);
m_sock = INVALID_SOCKET;
WSACleanup();
}//线程函数
void ThreadStart(void *arg)
{
int client = (int)arg;
int n = 0, r = 0; //此处client就是与客户端通信的socket
//可以用recv()/send()接收或发送数据 //关闭socket, 退出线程函数, 线程结束
closesocket(client);
}//////////////////////////////////////////
// 客户端代码
//////////////////////////////////////////
#include <winsock.h> //包含头文件
#pragma comment(lib, "ws2_32.lib") //需要连接winsock库
void client(char *szHost, int nPort)
{
struct hostent *he;
unsigned long iaddr;
struct sockaddr_in m_HostAddr;
SOCKET sock;
WSADATA wsadata; //初始化winsock
WSAStartup(MAKEWORD(1, 1), &wsadata); //以下代码解释服务器地址
memset(&m_HostAddr, 0, sizeof(m_HostAddr));
iaddr = inet_addr(szHost);
if (iaddr != INADDR_NONE)
{
m_HostAddr.sin_addr.s_addr = iaddr;
}
else
{
he = gethostbyname(szHost);
if (he == NULL)
return;
memcpy(&(m_HostAddr.sin_addr), he->h_addr, he->h_length);
} m_HostAddr.sin_family = AF_INET;
m_HostAddr.sin_port = htons(nPort);
/////////////////// sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock == INVALID_SOCKET)
{
return;
} //设置接收的timeout, 可以不设
int opt = 2000;
if (setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO,
(char *)&opt, sizeof(opt)) == SOCKET_ERROR)
{
closesocket(sock);
return;
} //连接服务端
if (connect(sock, (const struct sockaddr *)&m_HostAddr,
sizeof(m_HostAddr)) == SOCKET_ERROR)
{
closesocket(sock);
return;
} //发送或接收数据
send(sock, "hello", 5, 0); //关闭socket
closesocket(sock); WSACleanup();
}