第一个windows网络程序
2010-08-22 17:28
441 查看
之前我一直在学习c#,相比c/c++来说,vs环境提供了更多的方便。
但是从今天开始我决定学习网络编程使用的语言不是c#,而是C/c++,虽然我不排斥c#和asp.net,因为他们具有更好的语法和开发效率,并且容易学习。
网络程序分为client 和server.windows封装了底层的网络操作,提供了一个通用的socket接口
常用函数WSAStartup(),socket(),closesocket(),WSACleanup(),connect().
常用数据结构sockaddr_in,和较早版本的sockaddr.
头文件:Wincock2.h
库文件:ws2_32.lib(使用这样的语法包含#pragma comment(lib,"ws2_32.lib ")
下边贴上最基本的代码
server端 :
程序逻辑,建立监听5000端口,然后等待客户端连接,发送"hello"字符串,然后关闭连接,重新等待新连接
Code:
#include <Winsock2.h>
#include <stdio.h>
#include <stdlib.h>
#pragma comment(lib,"ws2_32.lib ")
#define PORT 5000
void main()
{
int port = PORT;
WSADATA wsadata;
SOCKET sListen,sAccept;
int iLen;
int iSend;
char buf[] = "hello";
struct sockaddr_in serv,client;
if(WSAStartup(MAKEWORD(2,2),&wsadata)!=0)
{
printf("Winsock load failed/n");
return;
}
sListen = socket(AF_INET,SOCK_STREAM,0);
if(sListen ==INVALID_SOCKET)
{
printf("socket failed:%d/n",WSAGetLastError());
return;
}
serv.sin_family = AF_INET;
serv.sin_port = htons(port);
serv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
if(bind(sListen,(struct sockaddr*)&serv,sizeof(serv))==SOCKET_ERROR)
{
printf("bind() failed:%d/n",WSAGetLastError());
return;
}
if(listen(sListen,5)==SOCKET_ERROR)
{
printf("listen failed:%d/n",WSAGetLastError());
return;
}
iLen = sizeof(client);
while(1)
{
sAccept = accept(sListen,(struct sockaddr*)&client,&iLen);
if(sAccept == INVALID_SOCKET)
{
printf("accept()error:%d/n",WSAGetLastError());
return;
}
printf("accept client information:/n/tip:[%s],/n/tport:[%d]/n",inet_ntoa(client.sin_addr),ntohs(client.sin_port));
iSend = send(sAccept,buf,sizeof(buf),0);
if(iSend == SOCKET_ERROR)
{
printf("send() failed:%d/n",WSAGetLastError());
return;
}
else if(iSend==0)
break;
else
printf("send() byte:%d/n",iSend);
closesocket(sAccept);
}
closesocket(sListen);
WSACleanup();
}
client端
程序逻辑:主动连接192.168.0.100的5000端口,注意使用网络字节序和本地字节序的转换htons(),htonl(),ntohs(),ntohl().
Code:
#include <Winsock2.h>
#include <stdio.h>
#include <stdlib.h>
#pragma comment(lib,"ws2_32.lib ")
#define PORT 5000
#define BUFFER 1024
# define serveraddr 127.0.0.1
void main(int argc,char *argv)
{
WSADATA wsadata;
SOCKET client;
int port = PORT;
int iLen;
char buf[BUFFER];
struct sockaddr_in serv;
memset(buf,0,sizeof(buf));
if(WSAStartup(MAKEWORD(2,2),&wsadata)!=0)
{
printf("Winsock load failed/n");
return;
}
serv.sin_family = AF_INET;
serv.sin_port = htons(port);
serv.sin_addr.S_un.S_addr = inet_addr("192.168.0.100");
client = socket(AF_INET,SOCK_STREAM,0);
if(client == INVALID_SOCKET)
{
printf("socket()failed:%d",WSAGetLastError());
return;
}
if(connect(client,(struct sockaddr*)&serv,sizeof(serv))==INVALID_SOCKET)
{
printf("connect() failed:%d/n",WSAGetLastError());
return;
}
else
{
iLen = recv(client,buf,sizeof(buf),0);
if(iLen ==0)
return;
else if(iLen ==SOCKET_ERROR)
{
printf("revc() failed:%d/n",WSAGetLastError());
return;
}
else
{
}
printf("recv() data from server:%s/n",buf);
}
closesocket(client);
WSACleanup();
printf("/nok!");
while(1);
}
但是从今天开始我决定学习网络编程使用的语言不是c#,而是C/c++,虽然我不排斥c#和asp.net,因为他们具有更好的语法和开发效率,并且容易学习。
网络程序分为client 和server.windows封装了底层的网络操作,提供了一个通用的socket接口
常用函数WSAStartup(),socket(),closesocket(),WSACleanup(),connect().
常用数据结构sockaddr_in,和较早版本的sockaddr.
头文件:Wincock2.h
库文件:ws2_32.lib(使用这样的语法包含#pragma comment(lib,"ws2_32.lib ")
下边贴上最基本的代码
server端 :
程序逻辑,建立监听5000端口,然后等待客户端连接,发送"hello"字符串,然后关闭连接,重新等待新连接
Code:
#include <Winsock2.h>
#include <stdio.h>
#include <stdlib.h>
#pragma comment(lib,"ws2_32.lib ")
#define PORT 5000
void main()
{
int port = PORT;
WSADATA wsadata;
SOCKET sListen,sAccept;
int iLen;
int iSend;
char buf[] = "hello";
struct sockaddr_in serv,client;
if(WSAStartup(MAKEWORD(2,2),&wsadata)!=0)
{
printf("Winsock load failed/n");
return;
}
sListen = socket(AF_INET,SOCK_STREAM,0);
if(sListen ==INVALID_SOCKET)
{
printf("socket failed:%d/n",WSAGetLastError());
return;
}
serv.sin_family = AF_INET;
serv.sin_port = htons(port);
serv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
if(bind(sListen,(struct sockaddr*)&serv,sizeof(serv))==SOCKET_ERROR)
{
printf("bind() failed:%d/n",WSAGetLastError());
return;
}
if(listen(sListen,5)==SOCKET_ERROR)
{
printf("listen failed:%d/n",WSAGetLastError());
return;
}
iLen = sizeof(client);
while(1)
{
sAccept = accept(sListen,(struct sockaddr*)&client,&iLen);
if(sAccept == INVALID_SOCKET)
{
printf("accept()error:%d/n",WSAGetLastError());
return;
}
printf("accept client information:/n/tip:[%s],/n/tport:[%d]/n",inet_ntoa(client.sin_addr),ntohs(client.sin_port));
iSend = send(sAccept,buf,sizeof(buf),0);
if(iSend == SOCKET_ERROR)
{
printf("send() failed:%d/n",WSAGetLastError());
return;
}
else if(iSend==0)
break;
else
printf("send() byte:%d/n",iSend);
closesocket(sAccept);
}
closesocket(sListen);
WSACleanup();
}
client端
程序逻辑:主动连接192.168.0.100的5000端口,注意使用网络字节序和本地字节序的转换htons(),htonl(),ntohs(),ntohl().
Code:
#include <Winsock2.h>
#include <stdio.h>
#include <stdlib.h>
#pragma comment(lib,"ws2_32.lib ")
#define PORT 5000
#define BUFFER 1024
# define serveraddr 127.0.0.1
void main(int argc,char *argv)
{
WSADATA wsadata;
SOCKET client;
int port = PORT;
int iLen;
char buf[BUFFER];
struct sockaddr_in serv;
memset(buf,0,sizeof(buf));
if(WSAStartup(MAKEWORD(2,2),&wsadata)!=0)
{
printf("Winsock load failed/n");
return;
}
serv.sin_family = AF_INET;
serv.sin_port = htons(port);
serv.sin_addr.S_un.S_addr = inet_addr("192.168.0.100");
client = socket(AF_INET,SOCK_STREAM,0);
if(client == INVALID_SOCKET)
{
printf("socket()failed:%d",WSAGetLastError());
return;
}
if(connect(client,(struct sockaddr*)&serv,sizeof(serv))==INVALID_SOCKET)
{
printf("connect() failed:%d/n",WSAGetLastError());
return;
}
else
{
iLen = recv(client,buf,sizeof(buf),0);
if(iLen ==0)
return;
else if(iLen ==SOCKET_ERROR)
{
printf("revc() failed:%d/n",WSAGetLastError());
return;
}
else
{
}
printf("recv() data from server:%s/n",buf);
}
closesocket(client);
WSACleanup();
printf("/nok!");
while(1);
}
相关文章推荐
- 你的第一个Windows程序——绘制窗口
- vs2008编写第一个Windows程序
- 【VS开发】【OpenGL开发】OpenGL---Windows下配置与第一个OpenGL程序
- Windows网络命令行程序参数说明
- GTK学习第一步: Windows环境下运行第一个GTK程序
- windows编程入门之第一个程序
- 第一个Windows窗体程序
- UINIX 网络编程第一个获取服务器测试程序
- windows网络连接表 根据连接远程的ip端口判断本地程序
- 第一个Windows程序
- 第一个CC3200WIFI网络通信程序
- windows程序设计(1)---第一个windows程序--MessageBox
- 在Windows下编写并运行第一个ASP.NET 5 Preview Web API程序
- MFC第一个例子 -- windows程序运行原理
- Windows网络命令行程序
- 编写你的第一个Windows程序
- 创建你的第一个带有窗口的Windows程序
- windows第一个窗口程序转自windows程序设计王艳平老师编著
- 使用Code::blocks在windows下写网络程序
- 我的第一个windows程序