江苏大学嵌入式课程设计报告
江苏大学嵌入式课程设计报告
嵌入式系统课程设计报告
学院名称: 电气学院 专业班级: 电科1102 学生姓名: 胡志文 学 号:
江苏大学嵌入式课程设计报告
Linux下的SOCKET通信实验
摘要: (1)掌握Linux SOCEKT编程的常用函数:
---编写服务器程序server ---编写客户端程序client
---编写聊天程序的服务器程序listener ---编写聊天程序的客户端程序talker
(2)下载调试上述程序
一.1.socket概念:所谓socket通常也称作"套接字",应用程序通常通过"
套接字"向网络发出请求或者应答网络请求。以J2SDK-1.3为例,Socket和ServerSocket类库位于java .net包中。ServerSocket用于服务器端,Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。不管是Socket还是ServerSocket它们的工作都是通过SocketImpl类及其子类完成的。
2.socket基本应用:Socket实际在计算机中提供了一个通信端口,可以
通过这个端口与任何一个具有Socket接口的计算机通信。应用程序在网络上传输,接收的信息都通过这个Socket接口来实现。在应用开发中就像使用文件 句柄一样,可以对 Socket句柄进行读、写操作。套接字是网络的基本构件。它是可以被命名和寻址的通信端点,使用中的每一个套接字都有其类型和一个与之相连进程。套接字存在通信区域(通信区域又称地址簇)中。套接字只与同一区域中的套接字交换数据(跨区域时,需要执行某和转换进程才能实现)。WINDOWS 中的套接字只支持一个域——网际域。套接字具有类型。我们将 Socket翻译为套接字.
3.socket发展现状:七十年代中,美国国防部高研署(DARPA)将TCP/IP的
软件提供给加利福尼亚大学Berkeley分校后,TCP/IP很快被集成到Unix中,同时出现了许多成熟的TCP/IP应用程序接口(API)。这个API称为Socket接口。今天,SOCKET接口是TCP/IP网络最为 通用的API,也是在INTERNET上进行应用开发最为通用的API。
二.1.程序原理:
江苏大学嵌入式课程设计报告
2.程序流程图:
客户端流程图: 服务端流程图:
3、程序代码及相关代码注释: (1)客户端程序:
下面是一个简单的TCP客户端程序client.c,在这个程序中你必须提供一个命令行参数:服务端所在机器主机名。当然,服务端还必须在客户端运行以前就已经正常运行。
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <errno.h>
江苏大学嵌入式课程设计报告
#include <string.h> #include <netdb.h> #include <sys/types.h> #include <netinet/in.h> #include <sys/socket.h>
#define PORT 3490 // 连接时使用的端口号
#define MAXDATASIZE 100 // 一次所能接收的最长字符数 int main(int argc, char *argv[]) {
int sockfd, numbytes; char buf[MAXDATASIZE]; struct hostent *he;
struct sockaddr_in their_addr; // 客户端信息 if (argc != 2) {
fprintf(stderr,"usage: client hostname\n"); exit(1); }
if ((he=gethostbyname(argv[1]))== NULL) { // 域名解析
perror("gethostbyname"); exit(1); }
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0))== -1) {
perror("socket"); exit(1);
//创建套接字,返回文件描述符
}
their_addr.sin_family = AF_INET; // 采用ipv4
their_addr.sin_port = htons(PORT); // 将主机号转换成网络号 their_addr.sin_addr = *((struct in_addr *)he->h_addr);
memset(&(their_addr.sin_zero), '\0', 8); // 制作成字符串
if (connect(sockfd, (struct sockaddr *)&their_addr, sizeof(struct sockaddr)) == -1) {
//请求连接 perror("connect"); exit(1);
}
if ((numbytes=recv(sockfd, buf, MAXDATASIZE-1, 0)) == -1) {
perror("recv"); exit(1);
//接收数据
}
buf[numbytes] = '\0';
printf("Received: %s",buf);
close(sockfd); //关闭套接字 return 0; }
江苏大学嵌入式课程设计报告
(2)服务端程序:
TCP 服务器端通过如下步骤建立:
a) 通过函数 socket()建立一个套接口。
b) 通过函数 bind()绑定一个地址(IP 地址和端口地址)。这一步确定了服务器的位置,使客户端知道如何访问。
c) 通过函数 listen()监听(listen)端口的新的连接请求。 d) 通过函数 accept()接受新的连接。
下面是一个简单的TCP服务器程序server.c,该程序对于每一个连接的客户端直接发送 Hello, world!\n”字符串:
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <errno.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <sys/wait.h> #include <signal.h>
#define MYPORT 3490 //设置端口号
#define BACKLOG 10 //可以同时连接的最大客户端数 void sigchld_handler(int s) {
while(wait(NULL) > 0); }
//信号处理函数,防止出现僵尸进
程
int main(void) {
int sockfd, new_fd;
//sockfd是监听描述符,new_fd是
连接描述符
struct sockaddr_in my_addr; //服务端信息 struct sockaddr_in their_addr; //客户端信息 int sin_size;
struct sigaction sa; int yes=1;
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
perror("socket"); exit(1);
//创建服务端文件描述符
}
if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int))==-1) { //
perror("setsockopt");
江苏大学嵌入式课程设计报告
exit(1); }
my_addr.sin_family = AF_INET; //ipv4
my_addr.sin_port = htons(MYPORT); //将主机号转换成网络号 my_addr.sin_addr.s_addr = INADDR_ANY; //可以和任何主机通信 memset(&(my_addr.sin_zero), '\0', 8);
if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1){
perror("bind"); exit(1);
…… 此处隐藏:2968字,全部文档内容请下载后查看。喜欢就下载吧 ……相关推荐:
- [实用文档]李践-有效提升销售的12大黄金法则8-大
- [实用文档]党支部换届工作方案
- [实用文档]2013年下期电子商务专业部宣传工作计划
- [实用文档]方庄一矿通风、钻探绩效工资考核管理办
- [实用文档]项目一 认识企业物流认识企业物流
- [实用文档]MBI_Display_产品蓝图规画
- [实用文档]北京市建筑业劳务作业人员普法维权培训
- [实用文档]锅炉燃烧调整与运行优化
- [实用文档]4支付结算业务的核算
- [实用文档]米什金_货币金融学_第9版各章学习指导
- [实用文档]水泥混凝土路面硬化工程施工组织设计
- [实用文档]钢筋工程安全技术交底书
- [实用文档]关于公布华中师范大学本科毕业论文
- [实用文档]太原市园林绿化施工合同范本 2
- [实用文档]周日辅导 初中英语分类复习单项选择题(
- [实用文档]第四章 文化经纪人的管理形式 第二节
- [实用文档]学宪法讲宪法竞赛题库
- [实用文档]《数值计算方法》期末考试模拟试题二
- [实用文档]爱词霸学英语:每日一句( 十月)
- [实用文档]2014年国家公务员面试:无领导小组讨论
- 新课程主要理念和教学案例分析汇编(24
- 英国人的快乐源于幸福的家庭生活
- 七年级上册第一次月考模拟数学试卷
- 真丝及仿真丝的种类有哪些?
- 【最新】华师大版八年级数学下册第十六
- 高中英语3500个必背单词
- 我可以接受失败,但我不能接受放弃!
- 最近更新沪科版八年级物理上册期末试卷
- 绿化工作先进乡镇事迹材料
- 鲁教版九年级上册思想品德教学计划
- 英语音标的分类
- 地下室底板无梁楼盖与普通梁板结构形式
- 美容师黄金销售话术
- 雅思写作满分作文备考方法
- 血清甲状腺激素测定与高频彩色多普勒超
- 1度浅析装修对室内空气品质的影响
- 2017-2022年中国汞矿行业深度分析与投
- 计算机二级VB公共基础知识
- (何勇)秸秆禁烧_重在寻找出路
- 内外墙抹灰工程分包施工合同1




