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)
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)
相关文章推荐
- Java与CSP数据兼容之二:Java兼容CSP导出的RSA私钥数据
- windows下用eclipse+goclipse插件+gdb搭建go语言开发调试环境
- Struts2如何传值到JSP页面
- C#中调用C++的dll的参数为指针类型的导出函数(包括二级指针的情况)
- 颠倒整数(LintCode)
- j2ee学习 struts2 笔记补充property相关
- PHP的APC模块实现上传进度条
- Github使用教程
- python列表生成
- Java:字符串类String的功能介绍
- j2ee学习struts2 笔记
- 面向对象编程中如何描述对象之间的关系?
- 判断设备的代码
- GitHub开源项目总结
- php yii .htaccess
- Eclipse常用快捷键
- Go语言编程中对文件读写的基本方法整理
- 用java语言实现图的广度优先遍历和深度优先遍历
- ubuntu下安装和配置java开发环境[转]sudo
- 编程珠玑笔记1