- CSDN作者:Andoubi
- 原文链接:http://blog.csdn.net/andoubi/article/details/51778988
- 服务端代码 server.c
- #include<stdio.h>
#include<sys/socket.h>
#include<string.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<stdlib.h>
#define portnum 3333 //随便定义一个端口
int main()
{
int sockfd, new_fd;
struct sockaddr_in server_addr;//服务器地址
struct sockaddr_in clint_addr; //客户机地址
char buffer[128];
int nbite;
int sin_size;
//1. 创建套接字
if((sockfd=socket( AF_INET, SOCK_STREAM, 0)) == -1)//如果创建套接字失败
{
printf("create socket error!\n");
exit(1);
}
//2.1 设置要绑定的地址,对server_addr初始化
bzero(&server_addr,sizeof(struct sockaddr_in));//全部成员清0
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons( portnum);//转换成网络字节序
server_addr.sin_addr.s_addr = htonl( INADDR_ANY);//转换成网络字节序
//2.2 绑定地址
bind( sockfd, (struct sockaddr *)&server_addr, sizeof(struct sockaddr) );
//3. 监听端口
listen(sockfd, 5);
while(1)
{
//4. 等待连接
sin_size = sizeof(struct sockaddr);
new_fd = accept(sockfd,(struct sockaddr *)(&clint_addr),&sin_size);
printf("server get connection from %s\n",(inet_ntoa(clint_addr.sin_addr)) );//打印出连接服务器的客户机地址
//5. 接收数据
nbite = recv( new_fd, buffer, 128, 0);//返回接收到的数据长度
buffer[nbite] = '\0';
printf("server received: %s\n",buffer );
//6. 结束连接
close( new_fd );
}
close(sockfd);
return 0;
} - 客户端代码 client.c
- #include<stdio.h>
#include<sys/socket.h>
#include<string.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<stdlib.h>
#define portnum 3333 //要与之建立连接的服务器端口号
int main()
{
struct sockaddr_in server_addr;
int sockfd, new_fd;
char buffer[128];
//1. 创建套接字
if((sockfd=socket( AF_INET, SOCK_STREAM, 0)) == -1)//如果创建套接字失败
{
printf("create socket error!\n");
exit(1);
}
//2.1 设置连接的服务器的地址
bzero(&server_addr,sizeof(struct sockaddr_in));//全部成员清0
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons( portnum);//转换成网络字节序
server_addr.sin_addr.s_addr = inet_addr("10.2.10.26");//将服务器地址写死,设置成虚拟机地址。inrt_addr转换得到的是网络字节序地址
//2.2 连接服务器
if(connect(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr)) == -1)
{
printf("connect error!\n");
exit(1);
}
//3. 发送数据到服务器
printf("please input char:\n");
fgets(buffer, 128, stdin); //从标准输入拿到字符,存入buff
send(sockfd, buffer,strlen(buffer), 0);
//4 关闭连接
close(sockfd);
return 0;
} - 端口号一般不用修改,
- 客户端设置连接的服务器的地址时,需要设定为自己的地址
- 编写makefile文件
- all:server client
server:server.c
gcc $^ -o $@
client:client.c
gcc $^ -o $@ - 注意命令要以tab键开头
- 运行make all ,进行编译
- 打开两个命令窗口,一个运行服务器端 ./server 另一个运行客户端 ./client localhost
- 客户端提示输入内容
- 服务器端提示连接成功,输出客户端发送过来的内容
linux网络编程入门
最新推荐文章于 2024-03-02 10:36:45 发布