码迷,mamicode.com
首页 > 其他好文 > 详细

VC网络编程 Socket套接字编程

时间:2014-12-26 09:40:36      阅读:249      评论:0      收藏:0      [点我收藏+]

标签:socket   网络编程   

基于TCP的Socket编程

TCP服务器:

#include<winsock2.h> //包含头文件
#include<stdio.h>
#include<windows.h>
#pragma comment(lib,"WS2_32.lib") //显式连接套接字库


int main() //主函数开始
{
WSADATA data; //定义WSADATA结构体对象
WORD w=MAKEWORD(2,0); //定义版本号码
char sztext[]="欢迎你\r\n"; //定义并初始化发送到客户端的字符数组
::WSAStartup(w,&data); //初始化套接字库
SOCKET s,s1; //定义连接套接字和数据收发套接字句柄
s=::socket(AF_INET,SOCK_STREAM,0); //创建TCP套接字
sockaddr_in addr,addr2; //定义套接字地址结构
int n=sizeof(addr2); //获取套接字地址结构大小
addr.sin_family=AF_INET; //初始化地址结构
addr.sin_port=htons(75);
addr.sin_addr.S_un.S_addr=INADDR_ANY;
::bind(s,(sockaddr*)&addr,sizeof(addr)); //绑定套接字
::listen(s,5); //监听套接字
printf("服务器已经启动\r\n"); //输出提示信息


while(true)
{
s1=::accept(s,(sockaddr*)&addr2,&n); //接受连接请求
if(s1!=NULL)
{
printf("%s已经连接上\r\n",inet_ntoa(addr2.sin_addr));
::send(s1,sztext,sizeof(sztext),0); //向客户端发送字符数组
}
::closesocket(s); //关闭套接字句柄
::closesocket(s1);
::WSACleanup(); //释放套接字库
if(getchar()) //如果有输入,则关闭程序
{
return 0; //正常结束程序
}
else
{
::Sleep(100); //应用睡眠0.1秒
}
}
}

TCP客户端:

#include<winsock2.h> //包含头文件
#include<stdio.h>
#include<windows.h>
#pragma comment(lib,"WS2_32.lib") //显式连接套接字库


int main() //主函数开始
{
WSADATA data; //定义WSADATA结构体对象
WORD w=MAKEWORD(2,0); //定义版本号码
::WSAStartup(w,&data); //初始化套接字库
SOCKET s; //定义连接套接字句柄
char sztext[10]={0};
s=::socket(AF_INET,SOCK_STREAM,0); //创建TCP套接字
sockaddr_in addr; //定义套接字地址结构
addr.sin_family=AF_INET; //初始化地址结构
addr.sin_port=htons(75);
addr.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
printf("客户端已经启动\r\n"); //输出提示信息
::connect(s,(sockaddr*)&addr,sizeof(addr));
::recv(s,sztext,sizeof(sztext),0);
printf("%s\r\n",sztext);
::closesocket(s); //关闭套接字句柄
::WSACleanup(); //释放套接字库
if(getchar()) //如果有输入,则关闭程序
{
return 0; //正常结束程序
}
else
{
::Sleep(100); //程序睡眠
}
}

基于UDP的Socket编程

UDP服务器:

#include<winsock2.h> //包含头文件
#include<stdio.h>
#include<windows.h>
#pragma comment(lib,"WS2_32.lib") //连接套接字库


int main()
{
WSADATA data; //定义结构体变量
WORD w=MAKEWORD(2,0); //定义套接字版本
char sztext[]="欢迎你\r\n"; //定义欢迎信息
::WSAStartup(w,&data); //初始化套接字库
SOCKET s; //定义套接字句柄
s=::socket(AF_INET, SOCK_DGRAM,0); //创建UDP套接字
sockaddr_in addr,addr2; //套接字地址结构变量
int n=sizeof(addr2); //地址结构变量大小
char buff[10]={0}; //接收数据缓冲区
addr.sin_family=AF_INET;
addr.sin_port=htons(75);
addr.sin_addr.S_un.S_addr=INADDR_ANY;
    ::bind(s,(sockaddr*)&addr,sizeof(addr)); //绑定套接字
printf("UDP服务器已经启动\r\n"); //显示提示信息


while(1)
{
if(::recvfrom(s,buff,10,0,(sockaddr*)&addr2,&n)!=0) //接收客户端信息
{
printf("%s已经连接上\r\n",inet_ntoa(addr2.sin_addr));
printf("%s\r\n",buff);
::sendto(s,sztext,sizeof(sztext),0,(sockaddr*)&addr2,n);//发送数据到客户端
break;

}
::closesocket(s); //关闭套接字对象
::WSACleanup(); //释放套接字库
if(getchar()) //如果有输入,则关闭程序
{
  return 0; //正常结束程序
}
else
{
  ::Sleep(100); //应用程序睡眠
}
}

UDP客户端:

#include<winsock2.h> //包含头文件
#include<stdio.h>
#include<windows.h>
#pragma comment(lib,"WS2_32.lib") //连接套接字库


int main()
{
WSADATA data; //定义结构体变量
WORD w=MAKEWORD(2,0); //初始化套接字版本号
::WSAStartup(w,&data); //初始化套接字库
SOCKET s; //定义套接字
s=::socket(AF_INET,SOCK_DGRAM,0); //创建UDP套接字
sockaddr_in addr,addr2; //定义套接字地址
int n=sizeof(addr2);
char buff[10]={0};
addr.sin_family=AF_INET;
addr.sin_port=htons(75);
addr.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
printf("UDP客户端已经启动\r\n");
char sztext[]="你好\r\n";
if(::sendto(s,sztext,sizeof(sztext),0,(sockaddr*)&addr,n)!=0) //发送信息
{
::recvfrom(s,buff,10,0,(sockaddr*)&addr2,&n); //接收信息
printf("服务器说:%s\r\n",buff);
::closesocket(s); //关闭套接字
::WSACleanup(); //释放套接字库

if(getchar()) //如果有输入,则关闭程序
{
return 0; //正常结束程序
}
else
{
::Sleep(100); //应用程序睡眠
}
}

VC网络编程 Socket套接字编程

标签:socket   网络编程   

原文地址:http://blog.csdn.net/cyksky/article/details/42167555

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!