您的位置:首页 > 编程语言

unix环境编程学习笔记---------套接字------socket------客户端

2015-10-27 15:41 344 查看
简单的客户端:::::

socket

/*

要点:

对于给定的监听套接口,内核要为其维护俩个队列:

1.已完成连接的队列

2.未完成连接的队列

*/

int main()

{

int sockfd =0;

sockfd =socket(PF_INET,SOCK_STREAM,0);

if(sockfd==-1)

{

perror("fun socket \n");

exit(0);

}

//客户端要要指定要连接哪一个服务器

struct sockaddr_in srvaddr;

srvaddr.sin.family=AF_INET;

srvaddr.sin_port=htons(8001);

srvaddr.sin.addr.s_addr=inet_addr("192.168.6.249");

//客户端开始连接

if(connect(sockfd,(struct sockaddr*)(&srvaddr),sizeof(srvaddr))<0)

{

perror("fun socket \n");

exit(0);

}

//连接建立以后,开始读写数据

//开辟一个内存区域用于容纳读取的内容

//客户端开始发送数据

char revbuf[1024]={0};

char sendbuf[1024]={0};

while(fgets(sendbuf,sizeof(sendbuf),stdin)!=NULL)//从标准输入获取输入, stdin 也是一个文件描述符,它所指向的是 :标准输入--键盘

{

//向服务器写数据

write(sockfd,sendbuf,strlen(sendbuf));//向套接字中写入数据

//从服务器读数据

read(sockfd,revbuf,sizeof(revbuf));

//read函数,从文件描述符里面读取数据把数据读取到这个自己开辟的内存里面即:buf

int ret=read(conn,revbuf,sizeof(revbuf));

if(ret==0)

{

//如果在读的过程重,对方已经关闭,tcpip 协议会返回一个0的数据包

printf("对方已经关闭");

exiy(0);

}

else if(ret<0)

{

printf("读取数据失败");

exit(0);

}

//下面开始写数据

fputs(revbuf,stdout);//从服务器端收到数据,打印到屏幕上。

//把内存缓冲区空间清零

memset(revbuf,0,sizeof(revbuf));

memset(sendbuf,0,siezeof(sendbuf));

}

close(fd);

return 0;

}

//然后,运行 netstat -na |grep 8001 可以查看我们编写的socket程序(端口号为8001)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: