热烈祝贺台州朗动科技的站长论坛隆重上线!(2012-05-28)    热烈庆祝伟大的祖国60周年生日 点击进来我们一起为她祝福吧(2009-09-26)    站长论坛禁止发布广告,一经发现立即删除。谢谢各位合作!.(2009-08-08)    热烈祝贺台州网址导航全面升级,全新版本上线!希望各位一如既往地支持台州网址导航的发展.(2009-03-28)    台州站长论坛恭祝各位新年快乐,牛年行大运!(2009-01-24)    台州Link正式更名为台州网址导航,专业做以台州网址为主的网址导航!(2008-05-23)    热烈祝贺台州Link资讯改名为中国站长资讯!希望在以后日子里得到大家的大力支持和帮助!(2008-04-10)    热烈祝贺台州Link论坛改名为台州站长论坛!希望大家继续支持和鼓励!(2008-04-10)    台州站长论坛原[社会琐碎]版块更名为[生活百科]版块!(2007-09-05)    特此通知:新台州站长论坛的数据信息全部升级成功!">特此通知:新台州站长论坛的数据信息全部升级成功!(2007-09-01)    台州站长论坛对未通过验证的会员进行合理的清除,请您谅解(2007-08-30)    台州网址导航|上网导航诚邀世界各地的网站友情链接和友谊联盟,共同引领网站导航、前进!(2007-08-30)    禁止发广告之类的帖,已发现立即删除!(2007-08-30)    希望各位上传与下载有用资源和最新信息(2007-08-30)    热烈祝贺台州站长论坛全面升级成功,全新上线!(2007-08-30)    
便民网址导航,轻松网上冲浪。
台州维博网络专业开发网站门户平台系统
您当前的位置: 首页 » Linux编程开发 » linux下C网络编程(socket)

linux下C网络编程(socket)

论坛链接
  • linux下C网络编程(socket)
  • 发布时间:2008-08-24 17:13:47    浏览数:6060    发布者:dingjianping    设置字体【   
经本人在NETTERM客户端测试,没发现什么问题.不过可能还有好多不合理的地方,希望各位大虾指正!

由于在我的博客上已经转载了几篇关于socket编程,所以此处只对头文件做简单介绍.

1.头文件介绍

errno.h

返回错误信息,用的是perro(),所以头文件有errno.h

netdb.h

定义struct hostent *gethostbyname(const char *hostname)要用的头文件.

#include
#include
#include

可能是网络编程用套节字必须的吧!

这是客户端程序,从服务器接受数据,别写入文件中.

QUOTE:
#include
#include
#include
#include
#include
#include
#include
#include
#define SERVPORT 3333
#define MAXDATASIZE 100

int main(int argc, char *argv[])
{
int sockfd, recvbytes;
char buf[MAXDATASIZE];
FILE *fp;
struct hostent *host;
struct sockaddr_in serv_addr;
if( argc < 2)
{
fprintf(stderr, "Please enter the server's hostname!\n");
exit(1);
}

if((host=gethostbyname(argv[1]))==NULL)
{
herror("gethostbyname出错!");
exit(1);
}

if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
perror("socket创建出错!");
exit(1);
}

serv_addr.sin_family=AF_INET;
serv_addr.sin_port=htons(SERVPORT);
serv_addr.sin_addr = *(struct in_addr*)host->h_addr;
bzero(&(serv_addr.sin_zero),8);

if (connect(sockfd, (struct sockaddr *)&serv_addr,
sizeof(struct sockaddr)) == -1)
{
perror("connect出错!");
exit(1);
}

if ((fp = fopen("output_file", "w")) == NULL)
{
printf ("can't open file");
exit(0);
}

while (1)
{
memset(buf, 0, 100);
recvbytes=recv(sockfd, buf, 100, 0);

if (recvbytes == 0)
{
printf("数据已经接收完!");
close(fp);
close(sockfd);
exit(0);
}

printf("%s", buf);
fprintf(fp, "%s", buf);
}

close (fp);
close(sockfd);

return 0;
}


服务器从文件读入数据到缓冲区,再发送给客户端.

QUOTE:
#include
#include
#include
#include
#include
#include
#include
#include
#define SERVPORT 3333
#define BACKLOG 10
#define MAXDATASIZE 100

int main()
{
int sockfd,client_fd;
char buff[MAXDATASIZE];
FILE *fp;
struct sockaddr_in my_addr;
struct sockaddr_in remote_addr;
socklen_t sin_size = sizeof(struct sockaddr_in);
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
perror("socket创建出错!");
exit(1);
}

my_addr.sin_family=AF_INET;
my_addr.sin_port=htons(SERVPORT);
my_addr.sin_addr.s_addr = inet_addr("192.168.1.211");
bzero(&(my_addr.sin_zero),8);

if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr))
== -1)
{
perror("bind出错!");
exit(1);
}

if (listen(sockfd, BACKLOG) == -1)
{
perror("listen出错!");
exit(1);
}
printf("server is running........\n");

if ((client_fd = accept(sockfd, (struct sockaddr *)&remote_addr,
&sin_size)) == -1)
{
perror("accept出错");
exit(1);
}
else
{
printf("客户端已经连上\n");
}

printf("开始发送数据.......\n");

if ((fp = fopen("input_file", "r")) == NULL)
{
printf ("can't open file");
exit (0);
}

while (!feof(fp))
{
if (fgets(buff, 256, fp) == NULL)
{
close(client_fd);
close(sockfd);
printf("发送完毕,退出!\n");
exit(0);
}

if (send(client_fd, buff, 100, 0) == -1)
{
perror("send出错!");
close(client_fd);
exit(0);
}

printf ("send buff = %s", buff);
}

close(fp);
close(client_fd);
close(sockfd);

return 0;
}


这个是input_file中的信息

QUOTE:
name:xiaoxia sex:male age:90
name:xiaoxiao sex:male age:12
name:x sex:male age:15
name:xi sex:male age:32
name:xia sex:male age:18
name:xiao sex:male age:17
name:xiaox sex:male age:16
~


大家有兴趣的话可以拷贝程序试验,需要两个屏幕操作,结果所得到的文件output_file和input_file信息格式一样.
娱乐休闲专区A 影视预告B 音乐咖啡C 英语阶梯D 生活百科
网页编程专区E AMPZF HTMLG CSSH JSI ASPJ PHPK JSPL MySQLM AJAX
Linux技术区 N 系统管理O 服务器架设P 网络/硬件Q 编程序开发R 内核/嵌入
管理中心专区S 发布网址T 版主议事U 事务处理