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 ...
随机推荐
- 微信小程序request请求封装,验签
1/ 公共文件util添加 request请求 //简单封装请求 function request(params, path, isShowLoading = true, goBack = false ...
- AJAX得基本使用
直接上案例:
- c++工厂模式和多线程结合
void a::create() { Function *f1 = m_functionmanager.CreateFunction(1);Function *f2 = m_functionmanag ...
- Linux中安装配置KVM虚拟化
KVM 概述: KVM 即 Kernel-based Virtual Machine 基于内核的虚拟机. KVM,是一个开源的系统虚拟化模块,自 Linux 2.6.20 之后集成在 Linux 的各 ...
- HTTP请求报文(请求行、请求头、请求体)
HTTP协议 1.简介 HTTP协议(Hyper Text Transfer Protocol,超文本传输协议),是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的 ...
- JavaSE--类与对象
一.类 类是具有相同特性(数据元素)和行为(功能)的对象的抽象就是类.因此,对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象,类实际上就是一种数据类型.类具有属性,它是对象的状态的抽象,用数 ...
- 运维dig语法
dig命令是常用的域名查询工具,可以用来测试域名系统工作是否正常 语法 1 dig(选项)(参数) 选项 1 @<服务器地址>:指定进行域名解析的域名服务器: 2 -b<ip地址&g ...
- Python爬虫之定时抢购淘宝商品
Python爬虫之定时抢购淘宝商品 import time from selenium import webdriver import datetime class Spider: def __ini ...
- webpack4导入jQuery的新方案
本文的目的 拒绝全局导入jQuery!! 拒绝script导入jQuery!! 找到一种只在当前js组件中引入jQuery,并且使用webpack切割打包的方案! 测试环境 以下测试在webpack3 ...
- Matlab 中 Data-driven 风格的 API 设计
设计 所谓 data-driven API,指的是用户可以把"操作"作为参数,传入函数,像下面这种: stream = dataStream('load', 'example.cs ...