linux socket 104 错误,linux socket连接中 ERRNO错误

本文探讨了Linux Socket编程中遇到的Connection refused错误,通过C++代码展示了客户端和服务端的示例,以及如何检查端口状态和解决粘包问题。重点介绍了服务端监听、连接接受和客户端连接尝试的步骤。
摘要由CSDN通过智能技术生成

Connection refused:应该是连接的服务端没有启动或者连接端口错误,可以用如下代码测试

client端:

#include

#include /* See NOTES */

#include

#include

#include

#include

#include

#include

#include

#define PORT 1234

#define SERVER "10.1.70.21"

int main()

{

int fd = socket(AF_INET, SOCK_STREAM, );

int nfd;

int ret;

struct sockaddr_in server_addr, client_addr;

bzero(&server_addr, sizeof(server_addr));

server_addr.sin_family =AF_INET;

server_addr.sin_port = htons(PORT);

inet_pton(AF_INET, SERVER, &server_addr.sin_addr);

//bind(fd, (struct sockaddr *)&server_addr, sizeof(server_addr));

errno = ;

ret = connect(fd, (struct sockaddr*)&server_addr, sizeof(server_addr));

if(ret == -)

{

perror("connect: ");

}

char buf[];

while()

{

bzero(buf, );

ret = read(STDIN_FILENO, buf, sizeof(buf));

printf("ret: %d, buf: %s", ret, buf);

ret = write(fd, buf, ret);

printf("ret:%d\n", ret);

if(ret < )

{

perror("write error");

}

ret = read(fd, buf, );

if(ret < )

{

perror("ret");

}

write(STDOUT_FILENO, buf, ret);

}

return ;

}

server端:

#include

#include /* See NOTES */

#include

#include

#include

#include

#include

#include

//server端监听端口

#define PORT 3388

int main()

{

int fd = socket(AF_INET, SOCK_STREAM, );//创建一个socket

int nfd;

struct sockaddr_in server_addr, client_addr;

bzero(&server_addr, sizeof(server_addr));

server_addr.sin_family =AF_INET; //ipv4

server_addr.sin_port = htons(PORT);//端口

server_addr.sin_addr.s_addr = htonl(INADDR_ANY);//监听本主机的所有ip

bind(fd, (struct sockaddr *)&server_addr, sizeof(server_addr));//绑定

listen(fd, );//监听socket连接,30为三次握手队列大小

char buf[];

// 把server_addr.sin_addr的地址转换成字符串(点分十进制表示)

inet_ntop(AF_INET, &server_addr.sin_addr, buf, sizeof(buf));

printf("%s\n", buf);//一般输出为0.0.0.0

pid_t pid;

while()

{

bzero(buf, sizeof(buf));//buf清零,相当于memset(buf, 0, sizeof(buf));

socklen_t len= sizeof(client_addr);

nfd = accept(fd, (struct sockaddr*)&client_addr, &len);//接收socket连接

inet_ntop(AF_INET, &client_addr.sin_addr, buf, sizeof(buf));//获取socket连接客户端的ip

printf("accept connetc %s port %d\n", buf, ntohs(client_addr.sin_port));

pid = fork();

//子进程

if(pid == )

{

while()

{

int ret = read(nfd, buf, sizeof(buf));

if(ret <= )

{

perror("ret");

return ;

}

write(STDOUT_FILENO, buf, ret);

write(nfd, buf, ret);

}

}

}

return ;

}

Linux socket 编程中存在的五个隐患

前言:         Socket API 是网络应用程序开发中实际应用的标准 API.尽管该 API 简单,但是   开发新手可能会经历一些常见的问题.本文识别一些最常见的隐患并向您显示如何避免它 ...

11&period;1、socket连接中的粘包、精确传输问题

粘包: 发生原因: 当调用send的时候,数据并不是即时发给客户端的.而是放到了系统的socket发送缓冲区里,等缓冲区满了.或者数据等待超时了,数据才会发送,所以有时候发送太快的话,前一份数据还没有 ...

Linux Socket 编程简介

在 TCP/IP 协议中,"IP地址 + TCP或UDP端口号" 可以唯一标识网络通讯中的一个进程,"IP地址+端口号" 就称为 socket.本文以一个简单的 ...

socket连接和http连接的区别

socket连接和http连接的区别 HTTP协议:简单对象访问协议,对应于应用层  ,HTTP协议是基于TCP连接的 tcp协议:    对应于传输层 ip协议:     对应于网络层 TCP/IP ...

Linux Socket过程详细解释(包括三次握手建立连接,四次握手断开连接)

我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web 服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠s ...

linux网络编程中阻塞和非阻塞socket的区别

读操作 对于阻塞的socket,当socket的接收缓冲区中没有数据时,read调用会一直阻塞住,直到有数据到来才返 回.当socket缓冲区中的数据量小于期望读取的数据量时,返回实际读取的字节数.当 ...

Linux Xshell连接Linux服务器时报错Socket error Event&colon; 32 Error&colon; 10053

问题描述 在用Xshell连接Linux服务器时,出现错误提示"Socket error Event: 32 Error: 10053. Connection closing...Socke ...

Linux系统中errno对应的中文意思 errno&period;h

/usr/include/asm/errno.h #define EPERM 1 /* Operation not permitted */操作不允许 #define ENOENT 2 /* No s ...

linux fork进程请谨慎多个进程&sol;线程共享一个 socket连接,会出现多个进程响应串联的情况。

昨天组内同学在使用php父子进程模式的时候遇到了一个比较诡异的问题 简单说来就是:因为fork,父子进程共享了一个redis连接.然后父子进程在发送了各自的redis请求分别获取到了对方的响应体. 复 ...

随机推荐

作业七:团队项目——Alpha版本冲刺阶段010

今日安排:组内成员讨论 今日进程:组内成员讨论结束,并有明确的解决办法,每个人准备实践

Codrops 教程:基于 CSS3 的精美模态窗口效果

Codrops 分享了漂亮的模态窗口效果实现方法,希望给前端开发人员提供一些创新显示对话框的启示.这个方案使用了触发按钮(或任何的 HTML 元素),在点击的时候出现一个模态窗口,带有简单的过渡(或动 ...

十年学会编程 著者: Peter Norvig 翻译: Dai Yuwen

为何人人都这么着急? 信步走进任何一家书店,你会看到名为的书,还有各 种各样类似的书: 在几天内或几小时内学会Visual Basic, Windows, In ...

HTML5 &lt&semi;Canvas&gt&semi;文字粒子化

文字粒子化,额或者叫小圆圈化... 1

H5 拖放事件详解

拖放事件 H5的拖放事件提供了多个接口: 1.drag:当元素或者选中的文本被拖动时触发(每几百毫秒触发一次),应用在被拖拽元素上 2.dragend:当拖动操作结束时触发(通过释放鼠标按钮或者点击转 ...

P2278 操作系统

P2278 操作系统 题目描述 写一个程序来模拟操作系统的进程调度.假设该系统只有一个CPU,每一个进程的到达时间,执行时间和运行优先级都是已知的.其中运行优先级用自然数表示,数字越大,则优先级越高. ...

定时删除elasticsearch索引

从去年搭建了日志系统后,就没有去管它了,最近发现大半年各种日志的index也蛮多的,就想着写个脚本定时清理一下,把一些太久的日志清理掉. 脚本思路:通过获取index的尾部时间与我们设定的过期时间进行 ...

ruby Encoding

一. 查看ruby支持的编码 Encoding.name_list 二. 搜索编码 Encoding.find('US-ASCII') #=> US-ASCII,不存在则抛出异常 三. __EN ...

Etyma01 ced ceed cess

一. etyma ['ɛtə,mə] ced.ceed.cess -> go -> 行走,前进 二.for instance 1. precede=pre+ced+e pre- 在前 2. ...

VR技术在数据中心3D机房中的应用 (下)

VR技术在数据中心3D机房中的应用 (下) 前面给大家简单科普了一下VR的硬件设备以及VR在各个领域的应用,是不是觉得非常高大上?千言万语概括成一句话,VR能给用户带来前所未有的沉浸感和交互方式,让人 ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值