Server:

 #include<iostream>
#include<sys/types.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#include<unistd.h>
#include <errno.h>
#include<string.h> #define PORT 10004 using namespace std; void showError()
{
cout<<"Error : "<<strerror(errno)<<" Error code : "<<errno<<endl;
} int main()
{
int ss,sc;
struct sockaddr_in server_addr,client_addr,peer_addr;
char conn_ip[INET_ADDRSTRLEN];
int err;
ss=socket(AF_INET, SOCK_STREAM ,);
if(ss<){
showError();
return -;
}
cout<<"Init Socket"<<endl; bzero(&server_addr,sizeof(server_addr));
server_addr.sin_family=AF_INET;
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
server_addr.sin_port=htons(PORT); err=bind(ss,(struct sockaddr *)&server_addr,sizeof(server_addr));
if(err<){
showError();
return -;
}
cout<<"Bind"<<endl; err=listen(ss,);
if(err<){
showError();
return -;
}
cout<<"Waiting for connect..."<<endl; while(true){
socklen_t addrlen=sizeof(struct sockaddr);
sc=accept(ss,(struct sockaddr*)&client_addr,&addrlen);
if(sc==-){
showError();
continue;
} else {
int peer_len=sizeof(peer_addr);
getpeername(sc,(struct sockaddr *)&peer_addr,(socklen_t *)&peer_len);
cout<<"Connect from "<<inet_ntop(AF_INET,&peer_addr.sin_addr,conn_ip,sizeof(conn_ip))<<". : "<<ntohs(peer_addr.sin_port)<<endl;
ssize_t size=;
char buffer[];
while(true){
size=read(sc,buffer,);
if(size<=){
showError();
continue;
}
cout<<"Get message: "<<buffer<<endl;
cout<<"Send : "<<endl;
cin>>buffer;
write(sc,buffer,strlen(buffer)+);
}
}
}
return ;
}

Client:

 #include<iostream>
#include<string.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#include<unistd.h> #define PORT 10004 using namespace std; int main(int argc,char *argv[])
{
int s;
struct sockaddr_in server_addr; s=socket(AF_INET,SOCK_STREAM,);
if(s<){
cout<<"Init socket error"<<endl;
return -;
}
bzero(&server_addr,sizeof(server_addr));
server_addr.sin_family=AF_INET;
server_addr.sin_port=htons(PORT);
inet_pton(AF_INET, argv[], &server_addr.sin_addr); cout<<"Waiting for connect to "<<argv[]<<"."<<endl; while(true){
int err=connect(s,(struct sockaddr*)&server_addr,sizeof(server_addr));
if(err==-){
cout<<"Conn Error."<<endl;
} else {
ssize_t size=;
char buffer[];
while(true){
cout<<"Send msg:"<<endl;
cin>>buffer;
write(s,buffer,strlen(buffer)+);
size=read(s,buffer,);
cout<<"Message from server: "<<buffer<<endl;
}
}
}
return ;
}

Linux下cs简单通讯(socket)的更多相关文章

  1. SSL握手通信详解及linux下c/c++ SSL Socket代码举例(另附SSL双向认证客户端代码)

    SSL握手通信详解及linux下c/c++ SSL Socket代码举例(另附SSL双向认证客户端代码) 摘自: https://blog.csdn.net/sjin_1314/article/det ...

  2. Linux下一个简单的日志系统的设计及其C代码实现

    1.概述 在大型软件系统中,为了监测软件运行状况及排查软件故障,一般都会要求软件程序在运行的过程中产生日志文件.在日志文件中存放程序流程中的一些重要信息, 包括:变量名称及其值.消息结构定义.函数返回 ...

  3. SSL握手通信详解及linux下c/c++ SSL Socket代码举例

    SSL握手通信详解及linux下c/c++ SSL Socket代码举例 摘自:http://www.169it.com/article/3215130236.html   分享到:8     发布时 ...

  4. 详解linux下的串口通讯开发

    串行口是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的使用.常用的串口是RS-232-C接口(又称EIA RS-232-C)它是在1970年由美国电子工业协会(EIA)联合贝尔系统.调制解调 ...

  5. 具体解释linux下的串口通讯开发

    串行口是计算机一种经常使用的接口,具有连接线少.通讯简单,得到广泛的使用.经常使用的串口是RS-232-C接口(又称EIA RS-232-C)它是在1970年由美国电子工业协会(EIA)联合贝尔系统. ...

  6. 【转载】详解linux下的串口通讯开发

    来源:https://www.cnblogs.com/sunyubo/archive/2010/09/26/2282116.html 串行口是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的使 ...

  7. Linux下的简单好用的计算器bc

    1. 关于bc bc是随意精度计算器语言,通常在linux下当计算器用,简单好用.相当于windows下的计算器. 2. 支持的运算符 主要的数学运算: + 加法 - 减法 * 乘法 / 除法 ^ 指 ...

  8. Linux下一个简单sniffer的实现

    Sniffer(嗅探器)是一种基于被动侦听原理的网络分析方式.将网络接口设置在监听模式,便可以将网上传输的源源不断的信息截获.对于网络监听的基本原理我们不在赘述,我们也不开启网卡的混杂模式,因为现在的 ...

  9. 小知识积累-linux下一些简单开发配置

    系统环境为 redhat enterprise 6.x,主要是针对初学者在linux下用gcc和vi简单测试开发的一些配置 1.vi 自动换行 在终端下敲入vi命令打开文件 : vi ~/.vimrc ...

随机推荐

  1. C++ 全局变量 静态变量 全局函数 静态函数

    1. static 变量 静态变量的类型 说明符是static. 静态变量当然是属于静态存储方式,但是属于静态存储方式的量不一定就是静态变量. 例如外部变量虽属于静态存储方式,但不一定是静态变量,必须 ...

  2. [转帖].NET Core单文件发布静态编译AOT CoreRT

    .NET Core单文件发布静态编译AOT CoreRT https://www.cnblogs.com/linezero/p/CoreRT.htm .NET Core单文件发布静态编译AOT Cor ...

  3. WebService概念解释

    一句话概括什么是WebService   WebService是一种跨编程语言.跨操作系统平台的远程调用技术. 远程调用技术:远程调用是指一台设备上的程序A可以调用另一台设备上的方法B.比如:银联提供 ...

  4. SPOJ 703 SERVICE - Mobile Service 题解

    题面 好题啊!~ 设f[i][j][k][l]表示已经处理完前i个请求后,a在j,b在k,c在l的最小值是多少: 那么f[i][p[i]][k][l]=min(f[i][p[i]][k][l],f[i ...

  5. P1398 [NOI2013]书法家

    传送门 就是个普及组 $dp$ 合集,把 $NOI$ 从左到右拆成 $9$ 个部分,每个部分都可以分别 $dp$ 除了 $N$ 的中间部分比较恶心以外其他都还好,自己推一下然后就知道转移,就 $N$ ...

  6. RocketMQ高性能原理(pushConsumer,CommitLog,ZeroCopy)

    1. Rocketmq消费模型(实时性) 常见的数据同步方式有这几种: push:producer发送消息后,broker马上把消息投递给consumer.这种方式好在实时性比较高,但是会增加brok ...

  7. sql server 函数详解(2)数学函数

    绝对值函数ABS(x)和返回圆周率的函数PI() 平方根函数SQRT(x) 获取随机函数的函数RAND()和RAND(x) 四舍五入函数ROUND(x,y) 符号函数SIGN(x) 获取整数的函数CE ...

  8. SQL语句中*号的缺点

    我觉得这篇博客说的比较好,参考借鉴一下:https://blog.csdn.net/weixin_44588186/article/details/87263756

  9. ES各种操作的过程

    参考:https://blog.csdn.net/better_xf/article/details/81188050 一.es写入数据的过程 客户端选择一个node发送请求过去,这个node就是co ...

  10. Spring-data-jpa n+1问题

    Spring-data-jpa的n+1问题 当我们使用JPA提供给我们的find方法时,如果查询出来的对象关联着另外10个对象,那么JPA将会发送1+10次查询(这个对象本身要查询一次,然后每个关联对 ...