Linux下socket编程示范(一个服务…
来源:互联网 发布:mac压缩包解压错误 编辑:程序博客网 时间:2024/05/02 01:38
socket编程的基础函数使用请自查询,本文只给出在linuxgcc可编译运行的socket通信的服务器程序与客户端程序。
代码如下:server端
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include<signal.h> //signal
#include<sys/socket.h> //socket
#include <netinet/in.h> //sockaddr_in
#include <arpa/inet.h>
#include<string.h> //memset
const int BUFF_SIZE=10;
void process(int client_fd,int cmd)
{
switch(cmd)
{
case0:
printf("reccmd 0");break;
case1:
default:
printf("default %d\n",cmd);break;
}
send(client_fd,"OK",BUFF_SIZE,0);
}
int main(void) {
intserver_fd,client_fd; //socket fd
structsockaddr_in my_addr; //服务器网络地址结构体
structsockaddr_in remote_addr; //客户端网络地址结构体
intcmd;
charstr[10];
pid_tpid;
unsigned intlen;
//1.init
memset(&my_addr,0,sizeof(my_addr));//数据初始化--清零
my_addr.sin_family=AF_INET; //设置为IP通信
my_addr.sin_addr.s_addr=INADDR_ANY;//服务器IP地址--允许连接到所有本地地址上
my_addr.sin_port=htons(8000); //服务器端口号
//2.socket
if((server_fd = socket(AF_INET,SOCK_STREAM,0)) <0)//create socket;
{
perror("socket create failed");
exit(-1);
}
//3.bind
if(bind(server_fd,(struct sockaddr*)&my_addr,sizeof(structsockaddr))<0)
{
perror("bindfailed");
return1;
}
//4.listen
listen(server_fd,5);
puts("Nowserver begin listening ,the listen queue len is5");
signal(SIGCLD,SIG_IGN); //ignore tehdetail of the child process exit
intclient_len = sizeof(remote_addr);
while(1){
//5.accept
if((client_fd=accept(server_fd,(struct sockaddr*)&remote_addr,&client_len))<0)
{
perror("accept");
return 1;
}
if( (pid =fork())== 0) //child
代码如下:server端
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include<signal.h>
#include<sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include<string.h>
const int BUFF_SIZE=10;
void process(int client_fd,int cmd)
{
}
int main(void) {
//1.init
//2.socket
//3.bind
//4.listen
//5.accept