一.socket服务器和客户端的开发步骤
(1)创建套接字 socket();
(2)为套接字添加信息(IP地址和端口号) bind();
(3)监听网络信息 listen();
(4)监听到有客户端接入,接收一个连接 accept();
(5)数据交互 read(); write();
(6)关闭套接字,断开连接 close();
1.创建套接字
int socket(int domain, int type, int protocol);
//socket
int s_fd = socket(AF_INET, SOCK_STREAM,0);
if(s_fd == -1){
perror("socket");
exit(-1);
}
struct sockaddr_in s_addr;
memset(&s_addr,0,sizeof(struct sockaddr_in));
s_addr.sin_family = AF_INET;
s_addr.sin_port = htons(8888);
inet_aton("192.168.88.129",&s_addr.sin_addr);
2.添加信息
//bind
bind(s_fd,(struct sockaddr *)&s_addr,sizeof(struct sockaddr_in));
3.监听网络信息
//listen
listen(s_fd,10);
4.监听客户端
//accept
printf("wait connecting\n");
struct sockaddr_in c_addr;
memset(&c_addr,0,sizeof(struct sockaddr_in));
int clen = sizeof(struct sockaddr_in);
int c_fd = accept(s_fd,(struct sockaddr *)&c_addr,&clen);
if(c_fd == -1){
perror("accept");
exit(-1);
}
printf("connect,%s\n",inet_ntoa(c_addr.sin_addr));
5.数据交互
//read
char Readbuf[128];
int nread = read(c_fd, Readbuf,128);
if(nread == -1){
exit(-1);
perror("read");
}
else{
printf("nread:%d,context:%s\n",nread,Readbuf);
}
//write
char *Writebuf = "liuxinishandsome";
int nwrite = write(c_fd, Writebuf,strlen(Writebuf));
*服务器完整代码*
#include<stdio.h>
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
#include <arpa/inet.h>
#include<netinet/in.h>
#include<stdlib.h>
#include <unistd.h>
#include<string.h>
// int socket(int domain, int type, int protocol);
int main()
{
//socket
int s_fd = socket(AF_INET, SOCK_STREAM,0);
if(s_fd == -1){
perror("socket");
exit(-1);
}
struct sockaddr_in s_addr;
memset(&s_addr,0,sizeof(struct sockaddr_in));
s_addr.sin_family = AF_INET;
s_addr.sin_port = htons(8888);
inet_aton("192.168.88.129",&s_addr.sin_addr);
//bind
bind(s_fd,(struct sockaddr *)&s_addr,sizeof(struct sockaddr_in));
//listen
listen(s_fd,10);
//accept
printf("wait connecting\n");
struct sockaddr_in c_addr;
memset(&c_addr,0,sizeof(struct sockaddr_in));
int clen = sizeof(struct sockaddr_in);
int c_fd = accept(s_fd,(struct sockaddr *)&c_addr,&clen);
if(c_fd == -1){
perror("accept");
exit(-1);
}
printf("connect,%s\n",inet_ntoa(c_addr.sin_addr));
//read
char Readbuf[128];
int nread = read(c_fd, Readbuf,128);
if(nread == -1){
exit(-1);
perror("read");
}
else{
printf("nread:%d,context:%s\n",nread,Readbuf);
}
//write
char *Writebuf = "liuxinishandsome";
int nwrite = write(c_fd, Writebuf,strlen(Writebuf));
return 0;
}