封装系统提供的read函数和write函数源代码:(文件保存为iolib.h)
#include
#include
#include
ssize_t my_read(int fd,void *buf,size_t length)
{
ssize_t done = length;
while(done>0)
{
done=read(fd,buf,length);
if(done != length)
if(errno==EINTR)
done=length;
else
{
perror("fail to read!\n");
return -1;
}
else
break;
}
return done;
}
ssize_t my_write(int fd,void *buf,size_t length)
{
ssize_t done = length;
while(done>0)
{
done=write(fd,buf,length);
if(done != length)
if(errno==EINTR)
done=length;
else
{
perror("fail to write!\n");
return -1;
}
else
break;
}
return done;
}
翻转乾坤 于 2014-05-30 12:41:57发表:
我不确定自己能用多少时间把你忘了,也不敢保证我就能真的把你忘了,我只能像现在这样,不吵不闹,不悲不喜,安安静静的与你,再无交集
sleepydonkey 于 2014-05-22 11:22:14发表:
为什么我自己运行就是要出错呢,学套接字都要学崩溃了
414716676 于 2009-05-04 23:12:09发表:
以上是操作本地文件的网络编程基础程序
414716676 于 2009-05-04 22:54:56发表:
嘿嘿,最简单的服务器客服端程序,只能转换简单的字符串大小写而已
Mysdwn 于 2009-05-04 22:35:11发表:
高深,楼主牛
414716676 于 2009-05-04 22:01:22发表:
用GCC编译器编译:
gcc /aming/a_a.c /aming/iolib.h -o /aming/a_a
gcc /aming/b_a.c /aming/iolib.h -o /aming/b_a
运行方法:
打开两个终端,一个运行第一个程序,第二个运行第二个程序
414716676 于 2009-05-04 21:59:33发表:
客服端源代码:
#include
#include
#include
#include
#include
#include
#include
#include "iolib.h"
#define MAX_LINE 100
int main(int argc,char *argv[])
{
struct sockaddr_in sin;
char buf[MAX_LINE];
int sfd;
int port=8000;
char *str="Test Sting!";
int n;
if(argc>1)
{
str=argv[1];
}
bzero(&sin,sizeof(sin));
sin.sin_family=AF_INET;
inet_pton(AF_INET,"127.0.0.1",&sin.sin_addr);
sin.sin_port=htons(port);
if((sfd=socket(AF_INET,SOCK_STREAM,0))==-1)
{
perror("fail to creat socket!\n");
exit(1);
}
if(connect(sfd,(struct sockaddr *)&sin,sizeof(sin))==-1)
{
perror("fail to connect!\n");
exit(1);
}
n=my_write(sfd,str,strlen(str)+1);
if(n==-1)
exit(1);
n=my_read(sfd,buf,MAX_LINE);
if(n==-1)
exit(1);
printf("recive from server : %s \n",buf);
if(close(sfd)==-1)
{
perror("fail to close!\n");
exit(1);
}
return 0;
}
414716676 于 2009-05-04 21:59:04发表:
[i=s] 本帖最后由 414716676 于 2009-5-4 22:49 编辑 [/i]
服务器端源代码:
#include
#include
#include
#include
#include
#include
#include
#include "iolib.h"
#define MAX_LINE 100
void my_fun(char *p)
{
if(p==NULL)
return;
for(; *p !='\0'; p++)
if(*p >= 'A' && *p <= 'Z')
*p=*p-'A'+'a';
}
int main(void)
{
struct sockaddr_in sin;
struct sockaddr_in cin;
int l_fd;
int c_fd;
socklen_t len;
char buf[MAX_LINE];
char addr_p[INET_ADDRSTRLEN];
int port=8000;
int n;
bzero(&sin,sizeof(sin));
sin.sin_family=AF_INET;
sin.sin_addr.s_addr=INADDR_ANY;
sin.sin_port=htons(port);
if((l_fd=socket(AF_INET,SOCK_STREAM,0))==-1)
{
perror("fail to creat socket!\n");
exit(1);
}
if(bind(l_fd,(struct sockaddr *) &sin,sizeof(sin))==-1)
{
perror("fail to bind!\n");
exit(1);
}
if(listen(l_fd,10)==-1)
{
perror("fail to listen!\n");
exit(1);
}
printf("waiting..........\n");
while(1)
{
if((c_fd=accept(l_fd,(struct sockaddr *)&cin,&len))==-1)
{
perror("fail to accept!\n");
exit(1);
}
n=my_read(c_fd,buf,MAX_LINE);
if(n==-1)
exit(1);
else if(n==0)
{
perror("the connect has been closed!\n");
close(c_fd);
continue;
}
inet_ntop(AF_INET,&cin.sin_addr,addr_p,sizeof(addr_p));
printf("client IP IS %s ,port is %d\n",addr_p,ntohs(cin.sin_port));
printf("content is : %s \n",buf);
my_fun(buf);
n=my_write(c_fd,buf,n);
if(n==-1)
{
exit(1);
}
if(close(c_fd)==-1)
{
perror("fail to close!\n");
exit(1);
}
}
return 0;
}