最近安装了红旗Linux6,写了一个Socket文件测试:
Client.c
#include<stdio.h>
#include<sys/socket.h>
#include<netinet/in.h>
#define SERVERPORT 3333
#define MAXDATA 90//每次最大数据传输量
void main(int argc,char *argv[])
{
int cs,recvbytes;
char buf[MAXDATA];
struct hosten *host;
struct sockaddr_in serv_addr;
if(argc<2){
fprintf(stderr,"please enter the server's hostname!/n");
exit(1);
}
if((host=gethostbyname(argv[1]))==NULL){
herror("gethostbyname出错");
exit(1);
}
if((cs=socket(AF_INET,SOCK_STREAM,0))==-1){
perror("sock创建出错");
exit(1);
}
serv_addr.sin_family=AF_INET;
serv_addr.sin_port=htons(SERVERPORT);
//serv_addr.sin_addr=*((struct in_addr *)host->h_addr);//不知这里为什么会出错?
bzero(&(serv_addr.sin_zero),8);
if(connect(cs,(struct sockaddr *)&serv_addr,sizeof(struct sockaddr))==-1){
perror("connect出错");
exit(1);
}
if((recvbytes=recv(cs,buf,MAXDATA,0))==-1){
perror("recv出错");
exit(1);
}
buf[recvbytes]='/0';
printf("received: %s",buf);
close(cs);
printf("Hello world");
}
Server.c
#include<stdio.h>
#include<sys/socket.h>
#include<netinet/in.h>
#define SERVERPORT 3333
#define MAXCONNECT 9//最大同时连接数
void main()
{
int ss,cs;
struct sockaddr_in ssaddr;//本机地址信息
struct sockaddr_in csaddr;//客户端地址
int sin_size;
if((ss=socket(AF_INET,SOCK_STREAM,0))==-1){
perror('socket创建出错');exit(1);
}
ssaddr.sin_family=AF_INET;
ssaddr.sin_port=htons(SERVERPORT);
ssaddr.sin_addr.s_addr=INADDR_ANY;
bzero(&(ssaddr.sin_zero),8);
if(bind(ss,(struct sockaddr*)&ssaddr,sizeof(struct sockaddr))==-1){
perror("bind出错");
exit(1);
}
if(listen(ss,9)==-1){//MAXCONNECT
perror("listen出错");
exit(1);
}
while(1){
sin_size=sizeof(struct sockaddr_in);
if((cs=accept(ss,(struct sockaddr *)&csaddr,&sin_size))==-1){
perror("accept出错");
continue;
}
printf("received a connection from %s/n",inet_ntoa(csaddr.sin_addr));
if(!fork()){//子进程代码
if(send(cs,"hello,you are connected to a linux host!/n",26,0)==-1)
perror("send出错");
close(cs);
exit(1);
}
close(cs);
}
printf("Hello world");
}
Linux下创建线程可比Windows下不知简单多少倍!