Linux下cs简单通讯(socket)
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)的更多相关文章
- SSL握手通信详解及linux下c/c++ SSL Socket代码举例(另附SSL双向认证客户端代码)
SSL握手通信详解及linux下c/c++ SSL Socket代码举例(另附SSL双向认证客户端代码) 摘自: https://blog.csdn.net/sjin_1314/article/det ...
- Linux下一个简单的日志系统的设计及其C代码实现
1.概述 在大型软件系统中,为了监测软件运行状况及排查软件故障,一般都会要求软件程序在运行的过程中产生日志文件.在日志文件中存放程序流程中的一些重要信息, 包括:变量名称及其值.消息结构定义.函数返回 ...
- SSL握手通信详解及linux下c/c++ SSL Socket代码举例
SSL握手通信详解及linux下c/c++ SSL Socket代码举例 摘自:http://www.169it.com/article/3215130236.html 分享到:8 发布时 ...
- 详解linux下的串口通讯开发
串行口是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的使用.常用的串口是RS-232-C接口(又称EIA RS-232-C)它是在1970年由美国电子工业协会(EIA)联合贝尔系统.调制解调 ...
- 具体解释linux下的串口通讯开发
串行口是计算机一种经常使用的接口,具有连接线少.通讯简单,得到广泛的使用.经常使用的串口是RS-232-C接口(又称EIA RS-232-C)它是在1970年由美国电子工业协会(EIA)联合贝尔系统. ...
- 【转载】详解linux下的串口通讯开发
来源:https://www.cnblogs.com/sunyubo/archive/2010/09/26/2282116.html 串行口是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的使 ...
- Linux下的简单好用的计算器bc
1. 关于bc bc是随意精度计算器语言,通常在linux下当计算器用,简单好用.相当于windows下的计算器. 2. 支持的运算符 主要的数学运算: + 加法 - 减法 * 乘法 / 除法 ^ 指 ...
- Linux下一个简单sniffer的实现
Sniffer(嗅探器)是一种基于被动侦听原理的网络分析方式.将网络接口设置在监听模式,便可以将网上传输的源源不断的信息截获.对于网络监听的基本原理我们不在赘述,我们也不开启网卡的混杂模式,因为现在的 ...
- 小知识积累-linux下一些简单开发配置
系统环境为 redhat enterprise 6.x,主要是针对初学者在linux下用gcc和vi简单测试开发的一些配置 1.vi 自动换行 在终端下敲入vi命令打开文件 : vi ~/.vimrc ...
随机推荐
- [JS] 点击按钮触发后台事件前,弹出确认框
只需要在button中设置onclick属性触发事件即可 下面以ASP.NET代码为例, ASP.NET中按钮客户端触发js代码的属性是OnClientClick <asp:Button ID= ...
- Confluence6.9配置邮件服务器
一.调整confluence服务 1.在confluence安装目录下的server.xml中加一段邮件服务器的配置,加在confluence的Context中 <Context path=&q ...
- BUUOJ reverse 刮开有奖
刮开有奖 这是一个赌博程序,快去赚钱吧!!!!!!!!!!!!!!!!!!!!!!!!!!!(在编辑框中的输入值,即为flag,提交即可) 注意:得到的 flag 请包上 flag{} 提交 拖到id ...
- 关于Mybatis的Batch模式性能测试及结论(转)
近日在公司项目中,使用到spring+mybatis的架构,特对mybatis的batch模式做了相关研究,得出以下结论: 1.Mybatis内置的ExecutorType有3种,默认的是simple ...
- java集群技术(转)
序言 越来越多的关键应用运行在J2EE(Java 2, Enterprise Edition)中,这些诸如银行系统和账单处理系统需要高的可用性(High Availability, HA),同时像Go ...
- Mac 基于Anaconda的TensorFlow安装笔记
最近在中国大学MOOC平台学习北大的曹健老师上的“人工智能实践——Tensorflow”课程,开始我的人工智能之旅.第一天,讲解如何搭建实验室环境,我是mac系统,所以只写mac系统上的实验室环境安装 ...
- JS判断当前页面是在 QQ客户端/微信客户端/iOS浏览器/Android浏览器/PC客户端
browser.js var browser = { versions: function () { var u = navigator.userAgent, app = navigator.appV ...
- 解析Nuxt.js Vue服务端渲染摸索
本篇文章主要介绍了详解Nuxt.js Vue服务端渲染摸索,写的十分的全面细致,具有一定的参考价值,对此有需要的朋友可以参考学习下.如有不足之处,欢迎批评指正. Nuxt.js 十分简单易用.一个简单 ...
- 11.jQuery之自定义动画
注意:animate里面是一个对象,他有几个参数,详情可以参考官网 <style> div { position: absolute; width: 200px; height: 200p ...
- java中常见的异常种类
Java常见的异常种类 ------------------------------------------------------------------------------- java Exc ...