网络编程5:socket服务端和客户端代码实现
程序员文章站
2022-03-08 15:17:28
socket服务端和客户端代码实现客户端代码:#include #include #include //#include //与下一行冲突#include #include #include #include ...
socket服务器和客户端代码实现
服务器代码:
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
//#include <linux/in.h>//与下一行冲突
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <string.h>
int main()
{
//1.socket:获取套接字
int s_fd;
s_fd=socket(AF_INET,SOCK_STREAM,0);
if(s_fd==-1)
{
perror("socket");
exit(-1);
}
//2.bind:绑定IP地址和端口号
struct sockaddr_in s_addr;//在头文件#include <linux/in.h>当中定义的结构体
memset(&s_addr,0,sizeof(struct sockaddr_in));//清空
s_addr.sin_family=AF_INET;//绑定ip地址
s_addr.sin_port=htons(8988);//5000-9000为端口号,端口号需要转化为网络字节序
//s_addr.sin_addr.s_addr=inet_aton("127.0.0.1");//IP地址结构体,并转化。错误格式
inet_aton("172.20.10.3",&s_addr.sin_addr);//正确格式:对结构体取地址,再转换
bind(s_fd, (struct sockaddr *)&s_addr, sizeof(struct sockaddr_in));
//3.listen:监听是否有客户端到来
listen(s_fd,10);//监听10个
//4.accept:接受
int clen = sizeof(struct sockaddr_in);
struct sockaddr_in c_addr;
memset(&c_addr,0,sizeof(struct sockaddr_in));//清空
int c_fd=accept(s_fd,(struct sockaddr *)&c_addr,&clen);//通过套接字接受客户端,句柄换用c_fd
if(c_fd == -1)
{
perror("accept");
}
printf("get connext:%s\n",inet_ntoa(c_addr.sin_addr));
//5/read:读取数据
char readbuf[128];
int n_read=read(c_fd,readbuf,128);
if(n_read == -1)
{
perror("read");
}else
{
printf("get message: %d,%s\n",n_read,readbuf);
}
//6.write:发送数据--- 回复
char *msg="i get your connext";
write(c_fd,msg,strlen(msg));
return 0;
}
实现服务器代码之后,我们可以通过**windows平台或者Linux平台下的telnet客户端** 来测试服务器的地址端口是否导通
也可以通过客户端代码与服务器建立连接。
客户端代码:
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
//#include <linux/in.h>//与下一行冲突
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <string.h>
int main()
{
//1.socket:获取套接字
int c_fd;
c_fd=socket(AF_INET,SOCK_STREAM,0);
if(c_fd==-1)
{
perror("socket");
exit(-1);
}
struct sockaddr_in c_addr;
memset(&c_addr,0,sizeof(struct sockaddr_in));
c_addr.sin_family=AF_INET;
c_addr.sin_port = htons(8988);
inet_aton("172.20.10.3",&c_addr.sin_addr);
//2.connext:连接服务器
int cnt=connect(c_fd,(struct sockaddr *)&c_addr,sizeof(struct sockaddr));//在连接的过程会阻塞在这里
if(cnt==-1)
{
perror("socket");
exit(-1);
}
//3.write:客户端发送数据
char *msg = "msg from client\n";
write(c_fd,msg,strlen(msg));
//4.read:读取数据
char readbuf[128];
int n_read=read(c_fd,readbuf,128);
if(n_read == -1)
{
perror("read");
}else
{
printf("get message from sever: %d,%s\n",n_read,readbuf);
}
return 0;
}
注1:在win10操作系统下有telnet客户端,但没有telnet服务器,需要下载,安装并打开
需要进一步解决
注2:在linux平台上,telnet出现连接超时的问题,也需要进一步解决。
注3:以上代码在连接的时候存在小bug,有待修正。
本文地址:https://blog.csdn.net/weixin_40734514/article/details/108569731
上一篇: 2020-09-13
推荐阅读
-
Android socket实现原理详解 服务端和客户端如何搭建
-
PHP获取客户端真实IP地址的5种情况分析和实现代码
-
Golang实现的聊天程序服务端和客户端代码分享
-
nodejs socket实现的服务端和客户端功能示例
-
socket网络编程实现客户端和服务端通信
-
linux网络编程之用socket实现简单客户端和服务端的通信(基于TCP)
-
基于Java的Socket类Tcp网络编程实现实时聊天互动程序(三):回车实现数据到发送(详细代码完结)
-
网络编程5:socket服务端和客户端代码实现
-
PHP获取客户端真实IP地址的5种情况分析和实现代码
-
基于Java的Socket类Tcp网络编程实现实时聊天互动程序(二):Tcp通信的过程及代码编写