资源简介
分别编一个客机程序和服务器程序,首先建立客户程序与服务器之间正确的socket连结,然后利用send和recv函数,客户程序将一个较长的文本文件(如几k字节)中的数据发送给服务器。要求服务器全部正确地接收到所有的数据(一个也不能少),并将其存入一个文件。注意,先要传文件的大小(简单的方法是服务器知道文件的大小),服务器方生成子进程后要循环地接受数据,直至文件数据全部收到。在异种机之间测试程序。比较服务器收到的文件中的数据和客户机原先文件中数据是否完全相同。文本文件测试完成后,可再用二进制文件测试。 1.编写一个shell程序 findit,该程序搜索参数1指定的目录树,查找所有的以 .c和 .h结尾的文件,如文件行中含有参数2指定的字符串,显示该行和相应的文件名。如目录参数1缺省,则从当前目录中搜索。如: ./findit /home/student/wang searchstring 搜索以 /home/student/wang为根的目录树中的c程序和头文件,查找含有searchstring字符串的行,显示文件名。 ./findit searchstring 从当前目录开始搜索。请用含有shell特殊字符的字符串模式进一步调试该shell程序。 为了便于查找当前目录或登录目录下如wang目录中的执行文件 findit,可以在当前Shell中执行: PATH=.:$HOME/wang:$PATH
代码片段和文件信息
#include “sockcom.h“
int initSocket(char *rhost) {
int sockfd;
struct sockaddr_in server;
struct hostent *hp *gethostbyname();
sockfd = socket(AF_INET SOCK_STREAM 0);
if (sockfd<0) error(“Error opening stream socket.“);
if ((hp=gethostbyname(rhost))==NULL) error(“%s Unknow host.“ rhost);
server.sin_family = AF_INET;
bcopy((char *)hp->h_addr (char *)&server.sin_addr.s_addr hp->h_length);
server.sin_port=htons(PORT);
if(connect(sockfd (struct sockaddr *)&server sizeof(server))<0)
error(“Error connect to remote server.“ );
return sockfd;
}
int main(int argc char *argv[])
{
if (argc!=4) {
error(“Usage: client file1 remotehost file2“);
}
printf(“%s %s %s %s\n“ argv[0] argv[1] argv[2] argv[3]);
int n;
char buf[BUFSIZE];
char *filename = argv[1];
FILEINFO fileinfo;
strcpy(fileinfo.fname argv[3]);
int fd = open(filename O_RDONLY);
fileinfo.length = lseek(fd0LSEEK_END);
printf(“Filename: %s length: %d\n“ fileinfo.fname fileinfo.length);
int sockfd=initSocket(argv[2]);
if(write(sockfd &fileinfo sizeof(fileinfo))<0) error(“Error sending metadata.“);
lseek(fd 0L SEEK_SET);
while((n=read(fd buf BUFSIZE))>0) {
write(sockfd buf n);
}
close(fd);
printf(“EOF: disconnect\n“);
close(sockfd);
return 0;
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 513 2007-12-08 20:25 试验4\findit
文件 95 2007-12-08 20:28 试验4\findit-sim
文件 983 2007-12-09 00:31 试验4\readme.txt
文件 1271 2007-12-09 00:14 试验4\Socket\client.c
文件 102 2007-12-09 00:14 试验4\Socket\error.c
文件 1494 2007-12-24 13:52 试验4\Socket\server.c
文件 303 2007-12-09 00:14 试验4\Socket\sockcom.h
文件 1485 2007-12-09 00:14 试验4\Socket\server.c.bak
目录 0 2007-12-08 16:00 试验4\Socket
目录 0 2007-12-09 00:16 试验4
----------- --------- ---------- ----- ----
6246 10
- 上一篇:基于FPGA的电子秒表代码
- 下一篇:RXTX API文档
相关资源
- Cygwin1.5.24-2
- UNIX环境高级编程 第三版 随书代码
- 《unix网络编程》源代码
- 集美大学《基于unix_linux的C系统编程》
- dos2unixunix2dosmac2unixunix2mac 64bit&32bit
- dos2unix for windows
- 《Linux-UNIX系统编程手册 上、下册 全
- 实验四:实现一个unix命令解释程序代
- 北邮 蒋砚军 unix2
- 多用户多级目录文件系统
- DOS文件格式转化为UNIX文件格式的C程序
- UNIX课本习题答案
- UNIX文件系统
- 操作系统实验四:编写一个简单的u
- unix linux 等的xerces安装及配置
- 中南大学实验:SOCKET通信UDP协议-发送
- UNIX基础视频
- UNIX期末考试习题
- UNIX Linux程序设计教程
- dos2unixforWindows
- [原创]unix2dos dos2unix 批量 windows升级版
- [原创]unix2dos工具
- 示范了Unix和Linux下如何利用Raw Socket构
- 操作系统接口:兼容Unix/Linux命令接口
- unix-syslog-1.1.tar.gz
- unix高级编程第三版apueerror.h
- 华南理工大学操作系统实验六:实现
- 支持并发的多人聊天程序
- 鬼屋
- DB2 UDB for Linux UNIX and Windows 数据库管理
评论
共有 条评论