C socket 通信服务端端
http://%77w%77%2E%66%6F%72%61%73%70%2E%63n网站制作学习
根据网上的改了改,写了个简单的socket通信,具有相当大的bug,是需要在修改的。
基本实现是从客户端链接,然后发送数据,服务器接收数据并返回发送的内容。
这里的服务器端,有一个很大的bug(也不算),是每个clint都有一个新的process,嘿嘿,需要修改滴#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include "string_q.h"
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/wait.h>
#define SERVPORT 3333
#define BACKLOG 10
#define MAXSIZE 1024
int main(){
int sockfd,client_fd,rr,i,flag;
struct sockaddr_in my_addr;
struct sockaddr_in remote_addr;
char* msg;
struct name_list name_l[10];
rr = 0;
int rval;
char buf[MAXSIZE];
//create socket
if((sockfd = socket(AF_INET,SOCK_STREAM,0))== -1){
perror("socket creat failed!");
exit(1);
}
//bind port
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(SERVPORT);
my_addr.sin_addr.s_addr = INADDR_ANY;
bzero(&(my_addr.sin_zero),8);
if(bind(sockfd,(struct sockaddr*)&my_addr,sizeof(struct sockaddr))== -1){
perror("bind error!1");
exit(1);
}
//keep listen
if(listen(sockfd,BACKLOG) == -1){
perror("listen error");
exit(1);
}
//get all apply connect,is a endless loop
while(1){
int sin_size = sizeof(struct sockaddr_in);
client_fd = accept(sockfd,(struct sockaddr *)&remote_addr,&sin_size);
if(client_fd == -1){
perror("accept error!");
continue;
}
//printf("Receivd a connection from %s\n",(char*)inet_ntoa(remote_addr.sin_addr));
//child precess
if(!fork()){
//accept client send message
cc:
memset(buf,'\0',MAXSIZE);
if((rval = read(client_fd,buf,MAXSIZE))<0){
perror("read stream error!");
goto cc;
}
//printf("%s\n",buf);
// name_l[rr++].name = buf;
if(buf[0]=='1'){//send message
for(i=0;i<10;++i){
if(strncmp((buf+1),name_l[i].name,4)==0){
client_fd = name_l[i].fd;
break;
}
}
buf[5] ='0';
msg = buf + 5;
}else{// a new clint
flag = 0 ;
for(i=0;i<10;++i){
if(strncmp((void *)(buf+1),name_l[i].name,4)==0){
flag = 1;
break;
}
}
if (flag){
msg = "1You's name was used!";
}else{
strncpy(name_l[rr].name,(buf+1),4);
name_l[rr++].fd = client_fd;
msg = "0Wellcome!";
}
}
//char* msg = "Hello world!";
if(send(client_fd,msg,strlen(msg),0)== -1){
perror("send error");
close(client_fd);
exit(0);
}
goto cc;
close(client_fd);
}
//return 0;
continue;
}
return 0;
}
http://%77%77%77%2E%66网站制作%6F学习网%72%61%73%70%2E%63%6E