客户端编写思路:
1. socket 创建
2. bind 绑定ip地址和端口号到socket
3. connect 绑定client端与服务器建立连接
4. listen 两个参数,第一个socket,第二个数字(监听队列的大小)。
5. accept 接受socket连接,三个参数(返回值,客户端信息,结构体长度)
客户端信息:ip、地址族协议、端口号等
6.send 写操作
7.recv 读操作
客户端程序:
#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;
char buf[32]={0};
struct sockaddr_in server_addr;
sockfd=socket(PF_INET,SOCK_STREAM,0);
if(sockfd==-1)
{
perror("socket");
exit(1);
}
int length=sizeof(server_addr);
server_addr.sin_family=PF_INET; //PF_INET 地址族
server_addr.sin_port= PORT; //端口号
server_addr.sin_addr.s_addr=inet_addr("192.168.1.72"); //ip地址 绑定什么连接什么地址
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;
}
服务器程序:
#include<stdio.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<stdlib.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<string.h>
#include<pthread.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); //4个参数
if(-1==ret)
{
perror("recv");
// exit(1);
}
printf("recv from %d client %s!\n",fd,buf);
memset(buf,0,sizeof(buf));
}