套接字之udp通信
简言
UDP (User Datagram Protocol)用户数据报协议,udp对系统资源没有tcp多,使用数据报文,不保证数据的完整性.服务端server.c
单向服务端流程
- 创建socket
- 接收
- 关闭
代码
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <winsock.h>
#include <Windows.h>
#pragma comment (lib,"ws2_32.lib")
int main(int argc, char *argv[])
{
char str[128] = { 0 };
int length = 0;
//接收
SOCKET socket_server;
//地址
SOCKADDR_IN address_server;
SOCKADDR_IN address_client;
//版本
WORD version = MAKEWORD(2, 2);
WSADATA wsadata;
//获取版本,建立通信
int result = WSAStartup(version, &wsadata);
if (result != 0)
{
printf("出现错误!\n");
return 0;
}
if (LOBYTE(wsadata.wVersion) != 2 || HIBYTE(wsadata.wVersion) != 2)
{
printf("版本有误!\n");
return 0;
}
socket_server = socket(AF_INET, SOCK_DGRAM, 0);
address_server.sin_family = AF_INET;
//获取本地启动
address_server.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
address_server.sin_port = htons(8089);
//进行绑定
bind(socket_server, &address_server, sizeof(SOCKADDR));
//获取长度
length = sizeof(SOCKADDR);
while (1)
{
recvfrom(socket_server, str, 128, 0, &address_client, &length);
printf("接收内容:%s\n", str);
system(str);
memset(str, 0, 128);
}
closesocket(socket_server);
WSACleanup();
system("pause");
return 0;
}
客户端client.c
单向客户端流程(只发送)
- 创建socket
- 发送
- 关闭
代码
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <winsock.h>
#include <Windows.h>
#pragma comment (lib,"ws2_32.lib")
int main(int argc, char *argv[])
{
//套接字
SOCKET socket_client;
//地址
SOCKADDR_IN address_in;
//版本
WORD version = MAKEWORD(2, 2);
// 保存Windows套接字调用返回的初始化信息
WSADATA wsadata;
//获取版本,建立通信
int result = WSAStartup(version, &wsadata);
if (result != 0)
{
printf("出现错误!\n");
return 0;
}
if (LOBYTE(wsadata.wVersion) != 2 || HIBYTE(wsadata.wVersion) != 2)
{
printf("版本有误!\n");
return 0;
}
//初始化
socket_client = socket(AF_INET, SOCK_DGRAM, 0);
address_in.sin_family = AF_INET;
address_in.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
address_in.sin_port = htons(8089);
while (1)
{
char str[128] = { 0 };
scanf("%s", str);
sendto(socket_client, str, strlen(str) + 1, 0, &address_in, sizeof(SOCKADDR));
}
//关闭socket
closesocket(socket_client);
//WSACleanup和WSAStartup对应
WSACleanup();
system("pause");
return 0;
}
秋风
2016-07-26