|
最近学习网络编程,由于缺乏实验环境,所以装了vmware,然后又装了redhat as 4,现在终于就可以实验我的程序了,
没过多久问题就来了,客户程序在主机上写,服务器程序在虚拟机上写,这样调试修改比较方便.在虚拟机上些挺累人的,毕竟内存小,所以只给了虚拟机命令行界面,调试好后怎么保存我的程序呢,刚开始准备配置ftp服务,可是好像自己不会诶,算了,既然学编程就自己写一个好了,所以最初的方案是写一个传输程序,忙活了一大下午,终于出炉了,不知怎的灵光一闪,不是有自带的nc吗?看来是该利用起来的时候了.
想想自己要解决的问题,也就是把在主机中写好的源程序传到虚拟机上,于是就又写了一个简单客户端send,动动脑子,首先在虚拟机中nc -l -p 4000 > name.c ,然后主机中就
cat name.c | send ip , 搞定.
害我忙活了一大下午,看来以后应该多挖掘挖掘linux啊.
send 代码因为只是自己使用,所以写的很简单)
<code>
#include <stdio.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main(int argc, char *argv[])
{
int sockfd;
struct sockaddr_in seraddr;
int filefd;
char ch;
sockfd = socket(AF_INET, SOCK_STREAM, 0);
bzero(&seraddr, 0);
seraddr.sin_family = AF_INET;
seraddr.sin_port = htons(4000);
inet_pton(AF_INET, argv[1], &seraddr.sin_addr);
connect(sockfd,
(struct sockaddr *)&seraddr,
sizeof(seraddr));
while((ch = getchar()) != EOF)
{
write(sockfd, &ch, 1);
}
close(sockfd);
exit(0);
}
</code>
在主目录mkdir个bin,放进去,可以省些麻烦.
功能上就单一了一点,只能传输文本啦.不过我够用了.
如果有困境相似的朋友, 不妨试试,要传输二进制, 把EOF改了,用feof()应该能行吧.还有就是可能效率不高吧, 毕竟一个一个的传输, 再定义一个巨大的字符数组吧!
不知有没有喜欢网络编程的朋友,一起交流交流. |
|