端口号 我采用了自己设置的方式
废话不多说直接上代码
服务端
#include"stdio.h"
#include"string.h"
#include"unistd.h"
#include"stdlib.h"
#include"sys/socket.h"
#include"ctype.h"
#include <arpa/inet.h>
#define Port 6666
#define IP "192.168.0.xxx" //这里填自己电脑的IP 使用ifconfig 看下自己的IP是多少
int main(int agrc,char **agrv)
{
int lfd,cfd,i;
pid_t pid;
char buf[BUFSIZ];
char clie_IP[BUFSIZ];
struct sockaddr_in serv_addr,clie_addr;
socklen_t clie_addr_len;
int num;
lfd=socket(AF_INET,SOCK_STREAM,0);
serv_addr.sin_family=AF_INET;
serv_addr.sin_port=htons(atoi(agrv[1]));
serv_addr.sin_addr.s_addr=htonl(INADDR_ANY);
bind(lfd,(struct sockaddr *)&serv_addr,sizeof(serv_addr));
clie_addr_len=sizeof(clie_addr);
listen(lfd,128);
while(1)
{
cfd=accept(lfd,(struct sockaddr *)&clie_addr,&clie_addr_len);
printf("cliet IP:%s,clien port:%d\n",inet_ntop(AF_INET,&clie_addr.sin_addr.s_addr,clie_IP,sizeof(clie_IP)),ntohs(clie_addr.sin_port));
pid=fork();
if(pid==-1)
{
perror("fork fail");
}
if(pid>0)
{
close(cfd);
}
if(pid==0)
{
close(lfd);
while(1)
{
num=read(cfd,buf,sizeof(buf));
for(i=0;i<num;i++) //将客户端发送的数据 小写字母转换成大写然后发送给客户端
{
buf[i]=toupper(buf[i]);
}
write(cfd,buf,num);
}
}
}
close(lfd);
close(cfd);
}
客户端
```c
#include"stdio.h"
#include"ctype.h"
#include"arpa/inet.h"
#include"unistd.h"
#include"stdlib.h"
#include"string.h"
#include"sys/socket.h"
#include"string.h"
#define SERV_IP "192.168.0.xxx" //这个IP是服务端的IP
#define SERV_PORT 6666
int main(int agrc,char **agrv)
{
int cfd;
char buf[100];
struct sockaddr_in serv_addr;
// socklen_t serv_addr_len;
cfd=socket(AF_INET,SOCK_STREAM,0);
memset(&serv_addr,0,sizeof(serv_addr));
serv_addr.sin_family=AF_INET;
serv_addr.sin_port=htons(atoi(agrv[1]));
inet_pton(AF_INET,SERV_IP,&serv_addr.sin_addr.s_addr);
connect(cfd,(struct sockaddr *)&serv_addr,sizeof(serv_addr));
while(1)
{
fgets(buf,sizeof(buf),stdin);
write(cfd,buf,strlen(buf));
read(cfd,buf,sizeof(buf));
printf("%s\n",buf);
}
}
==整体的思路这样的,我们把PC当作我们的服务端,最重要的一点是 你要知道你的电脑IP 是多少,不是随便设的值,这个Ip就是你电脑的IP 然后在你客户端也就是树梅派上也要去连接这个IP 不要让系统随机分配IP 这样就可以链接上了 ==
zhang@zhang-virtual-machine:~/socket/demo2$ ./serv 8888
cliet IP:192.168.0.10,clien port:572