程序地带

socket编程实现客户端和服务端


一、服务端

在这里插入图片描述


#include <stdio.h>
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
//#include <linux/in.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <stdlib.h>
#include <string.h>
/*
1.socket
2.bind
3.listen
4.accept
5.read
6.write
*/
int main()
{
int s_fd;
struct sockaddr_in s_addr;
struct sockaddr_in c_addr;
char readBuf[128];
char *msg="I get your connect";
memset(&s_addr,0,sizeof(struct sockaddr_in));
memset(&c_addr,0,sizeof(struct sockaddr_in));
s_fd=socket(AF_INET,SOCK_STREAM,0);
if(s_fd==-1){
perror("socket");
exit(-1);
}
s_addr.sin_family=AF_INET;
s_addr.sin_port=htons(8989);
inet_aton("192.168.88.143",&s_addr.sin_addr);
bind(s_fd,(struct sockaddr *)&s_addr,sizeof(struct sockaddr_in));
listen(s_fd,10);
int clen=sizeof(struct sockaddr_in);
int c_fd=accept(s_fd,(struct sockaddr *)&c_addr,&clen);
if(c_fd!=-1){
perror("accept");
}
printf("get connet:%s ",inet_ntoa(c_addr.sin_addr));
int n_read=read(c_fd,readBuf,128);
if(n_read==-1){
perror("read");
}
else{
printf("get message %d,%s ",n_read,readBuf);
}
write(c_fd,msg,strlen(msg));
return 0;
}
二、客户端
#include <stdio.h>
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
//#include <linux/in.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <stdlib.h>
#include <string.h>
/*
1.socket
2.connect
3.listen
4.accept
5.read
6.write
*/
int main()
{
int c_fd;
struct sockaddr_in c_addr;
char readBuf[128];
char *msg="message from client";
memset(&c_addr,0,sizeof(struct sockaddr_in));
c_fd=socket(AF_INET,SOCK_STREAM,0);
if(c_fd==-1){
perror("socket");
exit(-1);
}
c_addr.sin_family=AF_INET;
c_addr.sin_port=htons(8989);
inet_aton("192.168.88.143",&c_addr.sin_addr);
if(connect(c_fd,(struct sockaddr *)&c_addr,sizeof(struct sockaddr))==-1){
perror("connect");
exit(-1);
}
write(c_fd,msg,strlen(msg));
int n_read=read(c_fd,readBuf,128);
if(n_read==-1){
perror("read");
}
else{
printf("get message from server: %d,%s ",n_read,readBuf);
}
//send
return 0;
}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/mklmlkj/article/details/109757205

随机推荐

如何在Uniapp中访问CabloyJS后端API管理系统

介绍CabloyJS是一款免费开源的NodeJS全栈开发框架,采用前后端分离设计,具备开箱即用的后台管理系统Cabloy-SDK是专门为Uniapp应用量身定制的前端SDK...

zhennann 阅读(658)

net4.0 WinForm程序用Task实现线程等待

net4.0 WinForm程序用Task实现线程等待

案例:点击事件触发后顺序执行GetA、GetB、GetC三个方法,GetB必须在GetA执行完成后才能执行。GetA执行要5s、GetB执行要2s、GetC执行要5s&#x...

DengFeng1996 阅读(632)

linux查看主机硬件命令

文章目录查看系统信息查看cpu查看网络信息查看硬盘查看内存查看系统信息uname-a查看cpu使用:lscpu查看网络信息ifconfig查看硬盘df-lh查看内存cat/proc/me...

呆萌的代Ma 阅读(713)

c++ 回调函数_【C语言更新】指向函数的指针

c++ 回调函数_【C语言更新】指向函数的指针

文/Edward 定义一个指向函数的指针前面我们说了,指针的本质其实就是用来存放地址的变量,将一个对象的地址赋值给指针的过程被称为指向。我们前面已经讲过了指针...

weixin_39586265 阅读(220)

软件工程方法实践与验证综述

软件工程方法实践与验证综述软件工程是研究和应用如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件,以及如何把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起...

z2541498852 阅读(205)