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. JS ----- 底层原理

    什么是JS JavaScript是一种基于对象的动态.弱类型脚本语言(简称JS),是一种解释型语言,和其他的编程语言不同,如java/C++等编译型语言,这些语言在代码执行前会进行通篇编译,先编译成字 ...

  2. 模板if 的使用

    from flask import Flask,render_template app = Flask(__name__) app.debug = True @app.route('/') def h ...

  3. linux shutdown 命令 关机 重启

    关机 shutdown -h now 重启 shutdown -r now

  4. HDU 1873 看病要排队(优先队列)

    看病要排队 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  5. 云服务器以及linux操作系统打开防火墙,在墙上开一个小口

    在服务器运行时,需要在某个端口上开一个小口,以供外部访问 执行命令/sbin/iptables -I INPUT -p tcp --dport 8080 -j ACCEPT 8080为端口号,需要开的 ...

  6. Centos7安装elasticsearch6.3及ik分词器,设置开机自启

    参考Elasticsearch 在CentOs7 环境中开机启动 建议虚拟机的内存大小为4G 1. 新建一个用户john 出于安全考虑,elasticsearch默认不允许以root账号运行. 创建用 ...

  7. python中判断变量的类型

    python的数据类型有:数字(int).浮点(float).字符串(str),列表(list).元组(tuple).字典(dict).集合(set) 一般通过以下方法进行判断: 1.isinstan ...

  8. php多域名单站点路由

    能够使多域名但是只有一个站点的小站,通过路由访问到各个指定目录 <?php //域名跳转路由 //默认跳转 $default = "http://www.stanwind.com/in ...

  9. list 小练习

    li = ["alex", "WuSir", "ritian", "barry", "wenzhou" ...

  10. mysql 函数GROUP_CONCAT(temp.amount SEPARATOR ',')的用法

    mysql 函数GROUP_CONCAT(temp.amount SEPARATOR ',')的用法 使用场景:例如:想要查询用户的最喜欢购买的几种商品,这个时候就需要使用group_concat(字 ...