server.c
#include <stdio.h>
#include <netdb.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <stdlib.h>
#include <unistd.h>// About child processes
int main(int argc,char **argv[])
{
int sockfd;
sockfd=socket(AF_INET,SOCK_STREAM,0);
if(sockfd==0)
{
printf("Socket create error !n");
exit(1);
}
printf("文件描述符:%dn",sockfd);
struct sockaddr_in server_addr,client_addr;
if(argc!=2)
{
printf("请输入端口!n");
exit(0);
}
int server_port;
//server_addr=argv[1];
server_port=atoi(argv[1]);
if(server_port<0)
{
printf("你输入的端口号错误!n");
exit(0);
}
bzero(&server_addr,sizeof(struct sockaddr_in));
server_addr.sin_family=AF_INET;
server_addr.sin_addr.s_addr=htonl(INADDR_ANY);
server_addr.sin_port=htons(server_port);
int bind_result;
bind_result=bind(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr));
if(bind_result==-1)
{
printf("绑定出错!n");
exit(0);
}
int connect_size=6;//连接数限制
int listen_result;
listen_result=listen(sockfd,connect_size);
char buffer[1024];
if(listen_result==-1)
{
printf("监听出错n");
exit(0);
}
int clientfd,client_size=sizeof(struct sockaddr_in),recv_result,i;
while(1)
{
clientfd=accept(sockfd,(struct sockaddr *)(&client_addr),&client_size);
if(clientfd==-1)
{
printf("连接建立出错!n");
break;;
}
printf("clientfd=%d,服务器与%s已建立连接!n",clientfd,inet_ntoa(client_addr.sin_addr));
recv_result=recv(clientfd,buffer,sizeof(buffer),0);
for(i=0;i<recv_result;i++)
printf("%c",buffer[i]);
printf("n 共计%d字符n",recv_result);
}
return 0;
}
client.c
#include <stdio.h>
#include <netdb.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <stdlib.h>
#include <unistd.h>// About child processes
int main(int argc,char **argv[])
{
int sockfd;
sockfd=socket(AF_INET,SOCK_STREAM,0);
if(sockfd==0)
{
printf("Socket create error !n");
exit(1);
}
printf("文件描述符:%dn",sockfd);
struct sockaddr_in server_addr,client_addr;
if(argc!=3)
{
printf("请输入IP,端口!n");
exit(0);
}
int server_port;
struct hostent *host;
host=gethostbyname(argv[1]);
server_port=atoi(argv[2]);
if(server_port<0||host==NULL)
{
printf("你输入的IP或端口号错误!n");
exit(0);
}
bzero(&server_addr,sizeof(struct sockaddr_in));
server_addr.sin_family=AF_INET;
server_addr.sin_addr=*((struct in_addr *)host->h_addr);
server_addr.sin_port=htons(server_port);
int connect_result;
int send_bytes;
char buffer[1024];
// while(1)
{
connect_result=connect(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr) );
if(connect_result==-1)
{
printf("连接出错!n");
exit(0);
}
printf("请输入数据:n");
scanf("%s",buffer);
send_bytes=send(sockfd,buffer,strlen(buffer),0);
printf("发送字符数:%dn",send_bytes);
}
return 0;
}
makefile
all:client server
clean:
rm -f server
rm -f client
server:server.c
gcc -g -o server server.c
client:client.c
gcc -g -o client client.c
演示:
注意:
makefile的gcc命令之前是Tab不是空格!