server.c
socket:建立套接字 bind:绑定 listen:监听 accept:接受网络请求
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <stdlib.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <pthread.h>
#include <string.h>
#define PORT 8000
void *ClientHandler(void *arg)
{
pthread_detach(pthread_self()); //线程分离,线程结束自动释放
int ret;
int fd=*(int *)arg;
char buf[32]={0};
ret=recv(fd, buf, sizeof(buf),0);
if(-1==ret)
{
perror("recv");
}
printf("recv from %d client %s!\n",fd,buf);
memset(buf, 0 ,sizeof(buf));
}
int main()
{
int sockfd,ret;
struct sockaddr_in server_addr;
struct sockaddr_in client_addr;
int fd[1000]={0},i=0;
pthread_t tid;
//创建一个sockfd
sockfd = socket(AF_INET,SOCK_STREAM,0);
if(-1==sockfd)
{
perror("socket"); //如果创建失败
exit(1);
}
int length=sizeof(server_addr);
server_addr.sin_family=AF_INET;
server_addr.sin_port=PORT; //端口号必须是网络字节序,有时需要大小端转换
server_addr.sin_addr.s_addr=inet_addr("192.168.1.10");
//进行绑定
ret=bind(sockfd, (struct sockaddr *)&server_addr, length);
if(-1==ret)
{
perror("bind"); //如果绑定失败
exit(2);
}
/**********定义服务器的最大可连接数目*******/
ret=listen(sockfd,5);
if(-1==ret) //5为等待的数目
{
perror("listen"); //监听套接字
exit(3);
}
length=sizeof(client_addr);
while(1)
{
memset(&client_addr,0,sizeof(client_addr));
fd[i]=accept(sockfd, (struct sockaddr *)&client_addr, &length);
if(-1==fd[i])
{
perror("accept");
exit(4);
}
printf("accept port %d fd %d!\n",&client_addr.sin_port,fd);
ret=pthread_create(&tid, NULL,ClientHandler,&fd[i]);
if(ret!=0)
{
perror("pthread_create");
}
}
return 0;
}
client.c
socket:建立套接字 connect:链接
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <stdlib.h>
#include <string.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <pthread.h>
#define PORT 8000
int main()
{
int sockfd,ret;
struct sockaddr_in server_addr;
char buf[32]={0};
sockfd = socket(AF_INET,SOCK_STREAM,0);
if(-1==sockfd)
{
perror("socket"); //如果创建失败
exit(1);
}
int length=sizeof(server_addr);
server_addr.sin_family=AF_INET;
server_addr.sin_port=PORT; //端口号必须是网络字节序 有时需要大小端转换
server_addr.sin_addr.s_addr=inet_addr("192.168.1.10");
ret=connect(sockfd, (struct sockaddr *)&server_addr, length);
if(-1==ret)
{
perror("connect"); //如果绑定失败
exit(1);
}
while(1)
{
scanf("%s",buf);
ret=send(sockfd, buf, strlen(buf), 0);
if(-1==ret)
{
perror("send");
}
memset(buf, 0 ,sizeof(buf));
}
return 0;
}