linux socket连接中 ERRNO错误
Connection refused:应该是连接的服务端没有启动或者连接端口错误,可以用如下代码测试
client端:
#include <stdio.h>
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
#include <strings.h>
#include <unistd.h>
#include <netinet/in.h>
#include <string.h>
#include <arpa/inet.h>
#include <errno.h>
#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 <stdio.h>
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
#include <strings.h>
#include <unistd.h>
#include <netinet/in.h>
#include <string.h>
#include <errno.h>
//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连接中 ERRNO错误的更多相关文章
- Linux socket 编程中存在的五个隐患
前言: Socket API 是网络应用程序开发中实际应用的标准 API.尽管该 API 简单,但是 开发新手可能会经历一些常见的问题.本文识别一些最常见的隐患并向您显示如何避免它 ...
- 11.1、socket连接中的粘包、精确传输问题
粘包: 发生原因: 当调用send的时候,数据并不是即时发给客户端的.而是放到了系统的socket发送缓冲区里,等缓冲区满了.或者数据等待超时了,数据才会发送,所以有时候发送太快的话,前一份数据还没有 ...
- Socket 连接错误及原因
ECONNABORTED 该错误被描述为"software caused connection abort",即"软件引起的连接中止".原因在于当服务和客户 ...
- 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: 32 Error: 10053
问题描述 在用Xshell连接Linux服务器时,出现错误提示"Socket error Event: 32 Error: 10053. Connection closing...Socke ...
- Linux系统中errno对应的中文意思 errno.h
/usr/include/asm/errno.h #define EPERM 1 /* Operation not permitted */操作不允许 #define ENOENT 2 /* No s ...
随机推荐
- 第七周——Linux内核如何装载和启动一个可执行程序
万子惠 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 part1 实验 ...
- 理解MySQL——索引与优化
转自:理解MySQL——索引与优化 写在前面:索引对查询的速度有着至关重要的影响,理解索引也是进行数据库性能调优的起点.考虑如下情况,假设数据库中一个表有10^6条记录,DBMS的页面大小为4K,并存 ...
- Excel替换应用
* 是通配符 ,代表任意字符 ?也是通配符, 代表单个字符替换回车 : 按住alt键不放,然后依次通过数字键盘输入1和0两个数字,放开数字键后再放开alt键.
- OpenStack虚拟机DHCP获取不到IP地址排查
版本:OpenStack Liberty Neutron DVR 现象: 1.在虚拟机内部不停地dhclient 2.在虚拟机所属的计算节点的物理网卡上抓包,发现该虚拟机发出的dhcp广播包 3.在虚 ...
- 3.Complementing a Strand of DNA
Problem In DNA strings, symbols 'A' and 'T' are complements of each other, as are 'C' and 'G'. The r ...
- MySQL字符串处理函数的几种常见用法
1.字符串大小写转化: (1).将tbl_student表的user_name字段所有小写字母,替换为大写: update tbl_student set user_name=UPPER(user_n ...
- jquery实现AJAX的4种方法
当我们用javascript写ajax程序写得很“开心”的时候,突然有人告诉你有一种东西叫jquery,它会告诉你不直接和 HttpRequest是多么的快乐,同时你再也不需要再烦恼纠结的ajax乱码 ...
- ping指定地址
最近用到相应功能,网上搜了下. 感谢网友的分享,原文链接如下:http://blog.csdn.net/nanfeiyannan/article/details/6636280 稍微更改了内容,代码如 ...
- Linux 下如何安装软件
一.解析Linux应用软件安装包 通常Linux应用软件的安装包有三种: 1) tar包,如software-1.2.3-1.tar.gz.它是使用UNIX系统的打包工具tar打包的. 2) rpm包 ...
- js中遍历对象的属性和值
今天想看一下js的数组遍历的内容,搜索到了一个关于对象遍历写好的函数,保留一下.以后好用. function allPrpos ( obj ) { // 用来保存所有的属性名称和值 var p ...