服务端: 客户端
socket_fd = socket( PF_ ,SOCK_ , ) :定义文件描述符 socket_fd= socket( PF_ , SOCK_ , )
命名类型,通信类型
| |
\/ |
bind(socket_fd,sockaddr_un/in ,length(name)) :绑定地址 |
| |
\/ \/
listen(socket_fd,number); :监听 connect(socket,&name,&lenght):连接
| / |
| / |
| / |
\/ / |
accept(socket_fd,&client_name,&client_length) :接受 |
| |
\/ \ /
working :处理 --------------------- --------working
|
\/
close(socket_fd) :结束
unlink(socket_name)
work:
在accept后,服务器与客户已经建立好连接了。可以调用网络I/O进行读写操作了,即实现了网咯中不同进程之间的通信!网络I/O操作有下面几组:
- read()/write()
- recv()/send()
- readv()/writev()
- recvmsg()/sendmsg()
- recvfrom()/sendto()
推荐使用recvmsg()/sendmsg()函数,这两个函数是最通用的I/O函数,实际上可以把上面的其它函数都替换成这两个函数。
主机socket:
int listen_fd,cli_fd;
srtuct sockaddr_in server_addr;
listen_fd = socket(PF_INET,SOCK_STREAM,0); 创建socket对象
bzero(server_addr,sizeof(server_addr));
server_adrr.sin_family = PF_INET; 协议类型
server_addr.sin_port = htons(8888); 地址端口
server_addr.sin_addr.s_addr = inet_addr("192.168.1.101"); 或者 = htonl(INADDR_ANY); 或者 =inet_addr(argv[1]);
选择固定ip 本机任意地址 用户输入
bind(listen_fd,(struct sockaddr *)&server_addr,sizeof(server_addr)) ; 绑定地址信息
listen(listen_fd,5); 监听网络
cli_fd = accept(listen_fd,NULL,NULL); /*accept(sockfd,(struct sockaddr *)&their_addr,&len)); 阻塞等待连接
working;
close(listen_fd)
客户端:
int sock_fd,;
struct sockaddr_in server_addr;
sock_fd = socket(PF_INET,SOCK_STREAM,0);
server_adrr.sin_family = PF_INET;
server_addr.sin_port = htons(8888);
server_addr.sin_addr.s_addr = inet_addr("192.168.1.101"); 或者 = htonl(INADDR_ANY); 或者 =inet_addr(argv[1]);
connect(sock_fd,(struct sockaddr *)&server_addr,sizeof(server_addr)); 发起连接
cloes(sock_fd)
http://www.cnblogs.com/li0803/archive/2008/11/03/1324746.html
http://www.qnr.cn/pc/erji/cpp/sj/201008/527491.html
http://www.blogjava.net/zjusuyong/articles/304788.html