随着互联网以及物联网的不断发展,网络通信已经成为了我们日常生活中不可或缺的一部分。而Socket编程则是网络通信中非常重要的一个环节,它负责接受和发送信息。
而在Linux操作系统下,Socket编程的端口监听则是非常重要的一个部分。本篇文章将会简单介绍Linux下如何轻松实现Socket端口监听的方法。
一、Socket端口监听的基本概念
在进行Socket编程时,通常需要指定一个本地的端口以供其他程序或者远程设备进行连接。而端口监听的作用则是监控某一个或某几个端口是否有数据来进行连接。
比如,在进行Web开发时,我们需要让浏览器访问我们部署的Web应用程序,那么我们就需要监听80端口。而在程序开发时,需要监听端口就像一把“耳朵”,它可以用来监听网络数据的到来并做相应的处理。
二、使用nc进行socket端口监听
1、nc的简单介绍
nc是一个Linux系统下十分常用的工具,它可以用于在本地主机之间传输文件,并且可以基于TCP或UDP协议进行传输。在这里我们重点介绍nc在进行Socket端口监听时的使用方法。
2、nc的socket端口监听实现
下面是使用nc实现Socket端口监听的具体操作步骤:
1. 我们需要安装nc工具:
sudo apt-get install nc
2. 然后,我们需要使用nc工具启动一个监听端口,这里我们监听的是8080端口,可以进行如下操作:
nc -l 8080
3. 接下来,我们可以在另外一个本地主机上使用telnet来访问开启的监听端口:
telnet 127.0.0.1 8080
三、使用Python进行socket端口监听
1、Python的简单介绍
Python是一种跨平台的编程语言,它在GNU/Linux(尤其是Ubuntu)系统下的应用非常广泛。由于它使用简单,所以也是进行Socket编程的优秀语言之一。
2、Python的socket模块
在Python中,socket模块提供了很好的工具来进行Socket编程,包括了监听和连接等相关操作。其中,socket模块的listen()函数用于开启一个监听端口,可以实现Socket端口的监听。
3、socket的端口监听实现
下面是使用Python实现Socket端口监听的具体操作步骤:
1. 我们需要导入socket模块:
import socket
2. 接着,我们需要开启一个Socket监听:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((”, 8080))
s.listen(1)
其中,AF_INET表示使用IPv4协议,SOCK_STREAM表示使用TCP协议。
3. 在控制台输出相应的信息:
print(“Wting for connection…”)
4. 然后,我们可以使用accept()函数去接受客户端的连接:
conn, addr = s.accept()
print(“Connected by”, addr)
这里的conn就代表了与客户端通信的socket对象,addr则表示连接的客户端地址。
至此,我们已经成功实现了一个基于Python的Socket端口监听程序。
:
本篇文章主要介绍了Linux下利用nc及Python两种不同的工具实现Socket端口的监听的方法。通过掌握基本的监听技能及工具,能够实现Socket通信中十分重要的一步操作。希望本文内容能够为大家提供一些帮助,让各位程序开发者能够更好的掌握并运用Socket编程知识。
成都网站建设公司-创新互联为您提供网站建设、网站制作、网页设计及定制高端网站建设服务!
Socket通信创建步骤:
(1)通过socket()函数创建socket
(2)通过bind函数绑定socket于设备地址
(3)进行读写操作read/recv/recvfrom write/send/sendto
(4)close方法关闭套接字
例子如下:
test1.c
#include
#include
#include
#include
#include
int main(void)
{
//create socket
int fd = socket(AF_INET, SOCK_DGRAM, 0);
if(fd==-1)
{
perror(“socket\n”);
exit(-1);
}
printf(“socket fd=%d\n”,fd);
//build connection address
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(6666);
addr.sin_addr.s_addr = inet_addr(“127.0.0.1”);
int r;
r = bind(fd,(struct sockaddr*)&addr,sizeof(addr));
if(r==-1)
{
perror(“bind”);
close(fd);
exit(-1);
}
printf(“bind address successful!\n”);
//accept or send message
char buf;
struct sockaddr_in from;
socklen_t len;
len = sizeof(from);
尘梁空 while(1)
{
r = recvfrom(fd,buf,sizeof(buf)-1,0,(struct sockaddr*)&from,&len);
if(r>0)
{
buf=0;
printf(“The message from %s is:%s\n”,inet_ntoa(from.sin_addr),buf);
}
else
{
break;
}
}
//close socket
close(fd);
return 0;
}
test2.c
#include
#include
#include
#include
#include
#include
#include
int main(void)
{
//create socket
int fd = socket(AF_INET,SOCK_DGRAM,0);
if(fd==-1)
{
perror(“socket”);
exit(-1);
}
printf(“create socket OK!\n”);
//create an send address
struct sockaddr_in addr={};
addr.sin_family = AF_INET;
addr.sin_port = htons(6666);
addr.sin_addr.s_addr=inet_addr(“127.0.0.1”);
//send the message to the specify address
int r;
派瞎 char buf;
while(1)
{
r = read(0,buf,sizeof(buf)-1);
if(r
#include
#include
#include
#include
#include
#include
#include
#define SERVPORT 6000 /*服务器监册岁带听端口号 */
#define BACKLOG 10 /* 更大同时连接请求数 */
#define MAXDATASIZE 100
main()
{
char buf;
int sockfd,client_fd; /*sock_fd:监听雀饥socket;client_fd:数据传输socket */
struct sockaddr_in my_addr; /* 本机地址信息 */
struct sockaddr_in remote_addr; /* 客户端地址信息 */
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
perror(“socket创建出错!”);
exit(1);
}
my_addr.sin_family=AF_INET;
my_addr.sin_port=htons(SERVPORT);
my_addr.sin_addr.s_addr = INADDR_ANY;
bzero(&(my_addr.sin_zero),8);
if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1)
{
perror(“bind出错!”);
exit(1);
}
if (listen(sockfd, BACKLOG) == -1)
{
perror(“listen出错!”);
exit(1);
}
while(1)
{
sin_size = sizeof(struct sockaddr_in);
if ((client_fd = accept(sockfd, (struct sockaddr *)&remote_addr, &sin_size)) == -1)
{
perror(“accept出州芦错”);
continue;
}
printf(“received a connection from %s\n”, inet_ntoa(remote_addr.sin_addr));
if (!fork())
{ /* 子进程代码段 */
if ((recvbytes=recv(client_fd, buf, MAXDATASIZE, 0)) ==-1)
{
perror(“recv出错!”);
close(client_fd);
exit(0);
}
buf = ‘\0’;
printf(“from client Received: %s”,buf);
if (send(client_fd, “thanks!\n”, 8, 0) == -1)
perror(“send出错!”);
close(client_fd);
exit(0);
}
close(client_fd);
}
}
//客户端client.c
#include
#include
#include
#include
#include
#include
#include
#include
#define SERVPORT 6000
#define MAXDATASIZE 100
main(int argc, char *argv)
{
int sockfd, recvbytes;
char buf;
struct hostent *host;
struct sockaddr_in serv_addr;
if (argc h_addr);
bzero(&(serv_addr.sin_zero),8);
if (connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(struct sockaddr)) == -1)
{
perror(“connect出错!”);
exit(1);
}
if (send(sockfd, “hello!\n”, 7, 0) == -1)
{
perror(“send出错!”);
exit(1);
}
if ((recvbytes=recv(sockfd, buf, MAXDATASIZE, 0)) ==-1)
{
perror(“recv出错!”);
exit(1);
}
buf = ‘\0’;
printf(“Received: %s”,buf);
close(sockfd);
}
//服务端server.c
#include
#include
#include
#include
#include
#include
#include
#include
#define SERVPORT 6000 /*服务器监册岁带听端口号 */
#define BACKLOG 10 /* 更大同时连接请求数 */
#define MAXDATASIZE 100
main()
{
char buf;
int sockfd,client_fd; /*sock_fd:监听雀饥socket;client_fd:数据传输socket */
struct sockaddr_in my_addr; /* 本机地址信息 */
struct sockaddr_in remote_addr; /* 客户端地址信息 */
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
perror(“socket创建出错!”);
exit(1);
}
my_addr.sin_family=AF_INET;
my_addr.sin_port=htons(SERVPORT);
my_addr.sin_addr.s_addr = INADDR_ANY;
bzero(&(my_addr.sin_zero),8);
if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1)
{
perror(“bind出错!”);
exit(1);
}
if (listen(sockfd, BACKLOG) == -1)
{
perror(“listen出错!”);
exit(1);
}
while(1)
{
sin_size = sizeof(struct sockaddr_in);
if ((client_fd = accept(sockfd, (struct sockaddr *)&remote_addr, &sin_size)) == -1)
{
perror(“accept出州芦错”);
continue;
}
printf(“received a connection from %s\n”, inet_ntoa(remote_addr.sin_addr));
if (!fork())
{ /* 子进程代码段 */
if ((recvbytes=recv(client_fd, buf, MAXDATASIZE, 0)) ==-1)
{
perror(“recv出错!”);
close(client_fd);
exit(0);
}
buf = ‘\0’;
printf(“from client Received: %s”,buf);
if (send(client_fd, “thanks!\n”, 8, 0) == -1)
perror(“send出错!”);
close(client_fd);
exit(0);
}
close(client_fd);
}
}
//客户端client.c
#include
#include
#include
#include
#include
#include
#include
#include
#define SERVPORT 6000
#define MAXDATASIZE 100
main(int argc, char *argv)
{
int sockfd, recvbytes;
char buf;
struct hostent *host;
struct sockaddr_in serv_addr;
if (argc h_addr);
bzero(&(serv_addr.sin_zero),8);
if (connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(struct sockaddr)) == -1)
{
perror(“connect出错!”);
exit(1);
}
if (send(sockfd, “hello!\n”, 7, 0) == -1)
{
perror(“send出错!”);
exit(1);
}
if ((recvbytes=recv(sockfd, buf, MAXDATASIZE, 0)) ==-1)
{
perror(“recv出错!”);
exit(1);
}
buf = ‘\0’;
printf(“Received: %s”,buf);
close(sockfd);
bind(绑定),将你定陵知义的socket连接符和你定义的端口号进行绑定;如果没有这个绑定,下一步的listen(监听)中,就不知道去监听哪个端口了,系统中有很多端口的;
accept(接受),在败陆listen(监听)的过程中,如果有客户端连接过来,就会调用察汪顷accept方法,只有在得到accept的返回值的方法以后,才能从连接上来的客户端socket中接收数据包;
个人理解,希望能帮到你。
关于linux 监听socket端口的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
创新互联-老牌IDC、云计算及IT信息化服务领域的服务供应商,业务涵盖IDC(互联网数据中心)服务、云计算服务、IT信息化、AI算力租赁平台(智算云),软件开发,网站建设,咨询热线:028-86922220
网站标题:Linux下如何轻松实现socket端口监听?(linux监听socket端口)
分享地址:http://www.mswzjz.cn/qtweb/news36/438436.html
攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能