WindowsSocket编程初步-UDP
来源:互联网 发布:淘宝crm客户管理方案 编辑:程序博客网 时间:2024/05/11 02:30
学期期末C语言实训,其中有个项目叫“UDP文件传输系统”。
其实如果只学了C语言,感觉做这些东西是根本不现实的。现在明白了,我们这一个学期就只是单纯学习语言,其中的基本语法。实际上根本谈不上写出实际的程序。
当时记得自己用两个循环,打出了9*9乘法口诀表时,那叫一个开心啊,感觉这就是编程了。(天真烂漫啊!)
然后继续说这个udp, 我觉得,其中涉及到的知识:
1. 网络原理(非常基础的部分):比如说基本的,数据走了哪几层,封装、解封装,c/s模式。。。等等的,就是一般网络原理书第一章的简介和概要,这些知识应该要知道。
2. Windows API 的基本知识, 这个好像在网络原理也讲了,套接字(Socket)的概念一定要有。
3. 基本的C语言语法基础一定要有。
其他的改天再写,先发一点最基本的代码:
服务端
#include <stdio.h>#include <string.h>#include <WINSOCK2.H>#pragma comment(lib, "ws2_32.lib")struct receive{int length;char ip[100]; // 用于接收对方ip地址char received_Buf[255]; // 用于接收对方主机名} RECEIVE_message;int main(int argc, const char* argv[]){WSAData wsaData;int iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);if (iResult != 0){printf("WSAStartup failed: %d\n", iResult);return -1;}// 创建套接字SOCKET Socket_of_Server;Socket_of_Server = socket(AF_INET, SOCK_DGRAM, 0);if (Socket_of_Server == INVALID_SOCKET){printf("Build socket filed: %d\n", WSAGetLastError());WSACleanup();return -1;}// 绑定套接字地址sockaddr_in LocalAddres;LocalAddres.sin_family = AF_INET;LocalAddres.sin_addr.s_addr = htonl(INADDR_ANY);LocalAddres.sin_port = htons(20000); // 注意此处使用网络模式的 端口号iResult = bind(Socket_of_Server, (SOCKADDR*)&LocalAddres, sizeof(SOCKADDR_IN));if (0 != iResult){WSACleanup();return -1;}sockaddr_in RemoteAddres;// &RemoteAddres是缓冲区地址,保存客户端的IP和端口等信息int RemoteAddres_length = sizeof(RemoteAddres); // RemoteAddres_length是包含地址信息的长度printf("服务端正在运行:\n");printf("********************************************************************************\n");// 等待客户端数据while(1){// 接收客户端的数据(包含对方主机名、IP地址)recvfrom(Socket_of_Server, (char*) &RECEIVE_message.received_Buf, sizeof(RECEIVE_message.received_Buf), 0, (sockaddr*)&RemoteAddres, &RemoteAddres_length);printf("对方主机说:%s\n", RECEIVE_message.received_Buf);char words[1000];printf("Server:");gets(words);sendto(Socket_of_Server, words, strlen(words) + 1, 0, (sockaddr*)&RemoteAddres, sizeof(RemoteAddres));}// 关闭套接字 closesocket(Socket_of_Server);// 清除动态链接 WSACleanup(); return 0;}客户端
// 客户端#include <stdio.h>#include <string.h>#include <WINSOCK2.H>#include <windows.h>#pragma comment(lib, "ws2_32.lib")int main(int argc, const char* argv[]){WSAData wsaData;// 初始化套接字int iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);if (iResult != 0){printf("WSAStartup faiied :%d\n", iResult);return -1;}// 创建套接字SOCKET socket_of_Client;socket_of_Client = socket(AF_INET, SOCK_DGRAM, 0);if (socket_of_Client == INVALID_SOCKET){printf("Build socket filed: %d\n", WSAGetLastError());WSACleanup();return -1;}// 定义远端套接字char Server_ip[] = "127.0.0.1";unsigned short Server_port = 20000;/* 注意, 此处是在调试过程中使用的IP和端口号真实网络中应该由服务器直接获取,或者由用户手动输入服务器IP*/// 指明对方服务器的地址结构sockaddr_in Server_Address;Server_Address.sin_family = AF_INET;Server_Address.sin_addr.s_addr = inet_addr(Server_ip);Server_Address.sin_port = htons(Server_port);int Server_Address_length = sizeof(Server_Address);// 与服务端通信printf("客户端正在运行:\n");printf("********************************************************************************\n");while (1){char words[1000];printf("Client:");gets(words);sendto(socket_of_Client, words, strlen(words) + 1, 0, (sockaddr*)&Server_Address, sizeof(Server_Address));recvfrom(socket_of_Client, (char*) &words, sizeof(words), 0, (sockaddr*)&Server_Address, &Server_Address_length);printf("Server:");puts(words);}WSACleanup();return 0;}
0 0
- WindowsSocket编程初步-UDP
- java-网络编程初步:TCP、UDP
- 【Python】 Python网络编程概论 + UDP初步
- WindowsSocket编程要注意的事情
- [windows网络编程]tcp/udp编程初步详解
- [windows网络编程]tcp/udp编程初步详解-转
- python网络初步(UDP)
- UDP编程
- UDP编程
- UDP编程
- UDP编程
- Udp编程
- UDP编程
- UDP编程
- UDP编程
- UDP编程
- UDP 编程
- udp编程
- iOS 上的蓝牙框架 - Core Bluetooth for iOS 很不错的讲解
- android 开发 常用到的一些网络通信包
- Java多线程编程总结笔记——01 Java语言的线程
- 基于云计算中心的能量有效任务调度算法
- 大学课程-- 计算机组成与系统结构
- WindowsSocket编程初步-UDP
- 传统渲染管线与可编程Shader着色器
- Apple Watch使用感受杂谈——2
- 黑客暴利生意:一个黑客的自白【转】
- 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "stdafx.h""
- Perl 中文处理
- Cisco ip helper-address的原理
- Exchange Server 2010安装及测试(Part1)
- JAVA POST和Get请求