赞
踩
Socket(套接字)是一种通讯机制,它包含一整套的调用接口和数据结构的定义,它给应用进程提供了使用如 TCP/UDP等网络协议进行网络通讯的手段。
客户端通常的调用序列是:(1) 调用socket函数创建套接字。 (2)调用connect连接服务器端。 (3)调用I/O函数(read/write)与服务器端通讯。 (4)调用close关闭套接字。
服务器端通常的调用序列为: (1)调用socket函数创建套接字。 (2)调用bind指定本地地址和端口。 (3)调用listen启动监听。(4)设置服务端标志 调用accept从已连接列队中提取客户连接。 (5)调用I/O函数(read/write)与客户端通讯。 (6)调用close关闭连接。
客户端代码:
- #include"common.h"
- struct stu
- {
- int id;
- char name[32];
- };
- int main()
- {
- int fd,ret;
- struct stu s;
- struct sockaddr_in saddr;
- fd=socket(AF_INET,SOCK_STREAM,0);
- if(fd<0)
- {
- perror("socket create");
- return -1;
- }
- saddr.sin_family=AF_INET ;
- saddr.sin_port=htons(8800) ;
- saddr.sin_addr.s_addr=inet_addr("127.0.0.1") ;
- ret=connect(fd,(struct sockaddr*)&saddr,sizeof(saddr));
- if(ret<0)
- {
- perror("connect");
- close(fd);
- return -1;
- }
- while(1)
- {
- printf("please input id and name\n");
- scanf("%d %s",&s.id,s.name);
- ret=write(fd,&s,sizeof(struct stu));
- if(ret<0)
- {
- perror("write");
- }
- }
- close(fd);
- }

服务端代码:
- #include"common.h"
-
- struct stu
- {
- int id;
- char name[32];
- };
- int main()
- {
- int fd,nfd;
- int ret;
- int addr_len;
- char buf[1024];
- struct stu s;
- struct sockaddr_in saddr,caddr;
- fd=socket(AF_INET,SOCK_STREAM,0);
- saddr.sin_family=AF_INET ;
- saddr.sin_port=htons(8800) ;
- saddr.sin_addr.s_addr=inet_addr("127.0.0.1") ;
- ret=bind(fd,(struct sockaddr*)&saddr,sizeof(saddr));
- if(ret<0)
- {
- perror("bind");
- }
- ret=listen(fd,20);
- if(ret<0)
- {
- perror("listen");
- }
- addr_len=sizeof(caddr);
- nfd=accept(fd,(struct sockaddr*)&caddr,&addr_len);
- if(nfd<0)
- {
- perror("accept");
- close(fd);
- return -1;
- }
-
- ret=read(nfd,&s,sizeof(struct stu));
- if(ret<=0)
- {
- perror("read");
- }
- else if(ret==0)
- {
- printf("tcp broken.\n");
- }
- else
- {
- printf("id:%d name:%s\n",s.id,s.name);
- }
- /*
- ret=write(nfd,"hello",5);
- if(ret<0)
- {
- perror("write");
- }
- else
- {
- printf("write ret:%d\n",ret);
- }*/
- close(nfd);
- close(fd);
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。