WindowsSockets基础—TCP,UDP程序

这篇博客深入介绍了Windows Sockets的基础知识,涵盖了TCP和UDP两种协议的使用。内容包括TCP Server和Client的实现,TCP API的讲解,以及无连接的UDP协议在套接字调用时序,UDPServer和UDPClient的操作,以及UDP API的说明。
摘要由CSDN通过智能技术生成

TCP程序

 

TCPServer

// TCPServer.cpp : 定义控制台应用程序的入口点。
//接收客户的发来的"MyTCP"
#include <stdio.h>
#include <WinSock2.h>
#pragma  comment(lib,"ws2_32.lib")
#define  BUF_SIZE 64
void main()
{
	WSADATA wsd;
	if (WSAStartup(MAKEWORD(2,2),&wsd) != 0)//初始化套接字动态库
	{
		printf("WSAStartup() failed! erron=%d\n",GetLastError());
		return;
	}
	SOCKET sServ;
	if ((sServ=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)) == INVALID_SOCKET)//创建套接字
	{
		printf("socket() failed! errno=%d\n",WSAGetLastError());
		WSACleanup();
		return;
	}

	//绑定服务器地址
	SOCKADDR_IN addrServ;
	addrServ.sin_family=AF_INET;
	addrServ.sin_addr.S_un.S_addr=INADDR_ANY;
	addrServ.sin_port=htons(5000);
	if (bind(sServ,(SOCKADDR*)&addrServ,sizeof(addrServ)) == SOCKET_ERROR)
	{
		printf("bind() failed!errno=%d\n",WSAGetLastError());
		closesocket(sServ);//关闭套接字
		WSACleanup();//释放套接字资源
		return;
	}

	if (listen(sServ,2) == SOCKET_ERROR)//开始监听
	{
		printf("listen() failed! errno=%\n",WSAGetLastError());
		closesocket(sServ);
		WSACleanup();
		return;
	}

	SOCKADDR_IN addrClient;
	SOCKET sClient;
	int len=sizeof(addrClient);
	if ((sClient=accept(sServ,(SOCKADDR*)&addrClient,&len)) == INVALID_SOCKET)//接收客户端连接
	{
		printf("accept() failed! error=%d\n",WSAGetLastError());
		closesocket(sServ);
		WSACleanup();
		return;
	}

	//接收客户端数据
	char buf[BUF_SIZE];		
	ZeroMemory(buf,BUF_SIZE);
	if (recv(sClient,buf,BUF_SIZE,0) == SOCKET_ERROR)
	{
		printf("recv() failed! error=%d\n",WSAGetLastError());
		closesocket(sClient);
		closesocket(sServ);
		WSACleanup();
		return;
	}
	printf("%s\n",buf);//输出“MyTCP”
	closesocket(sClient);
	closesocket(sServ);
	WSACleanup();
	system("pause");
	return;
}
//相对完整的http://blog.csdn.net/ouyangshima/article/details/8932334
/*
TCP编程的服务器端一般步骤是
1.创建一个socket,用函数socket();
2.设置socket属性,用函数setsockopt();  //可选
3.绑定IP地址,端口等信息到socket上,用函数bind();	
4.开启监听,用函数listen();
5.接收客户端上的来的连接,用函数accept();
6.收到数据用send()和recv(),或者read()和write();
7.关闭网络连接
8.关闭监听
服务器端 socket-->bind-->listen-->accept 
*/

TCPClient 

// TCPClient.cpp : 定义控制台应用程序的入口点。
//功能:向服务器端发送“MyTCP”
#include <stdio.h>
#include <WinSock2.h>
#pragma comment(lib,"ws2_32.lib")
#define BUF_SIZE 64
 void main()
 {
	 WSADATA wsd;
	 if (WSAStartup(MAKEWORD(2,2),&wsd) != 0)//初始化套接字动态库
	 {
		 printf("WSAStartup() failed! erron=%d\n",GetLastError());
		 return;
	 }

	 SOCKET sHost;//服务器套接字
	 if ((sHost=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)) == INVALID_SOCKET)//创建套接字
	 {
		 printf("socket() failed! errno=%d\n",WSAGetLastError());
		 WSACleanup();//释放套接字资源
		 return;
	 }
	
	 //设置服务器地址
	 SOCKADDR_IN servAddr;
	 servAddr.sin_family=AF_INET;
	 servAddr.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
	 servAddr.sin_port=htons(5000);
	 if (connect(sHost,(SOCKADDR*)&servAddr,sizeof(servAddr)) == SOCKET_ERROR)//连接套接字
	 {
		 printf("connect() failed! errno=%d\n",WSAGetLastError());
		 closesocket(sHost
  • 5
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值