C++ Socket(二)
来源:互联网 发布:vba 窗体输入数据回调 编辑:程序博客网 时间:2024/05/29 16:53
服务器实例
#include <iostream>#include<sstream>using namespace std;#ifdef __cplusplusextern "C" {#endif#include<sys/types.h>#include<sys/socket.h>#include<string.h>#include <arpa/inet.h>#include <unistd.h>#ifdef __cplusplus}#endif#ifndef MYSOCKET_PORT#define MYSOCKET_PORT 8888#endif#ifndef MYSOCKET_LISTEN_LENG#define MYSOCKET_LISTEN_LENG 2#endifvoid proccess_coon_server(int sc);int main(){ int err; int ss; ss=socket(AF_INET,SOCK_STREAM,0); if(ss<0){ cout<<"socket create error"<<endl; return -1; } sockaddr_in my_server_addar; bzero(&my_server_addar,sizeof(my_server_addar)); my_server_addar.sin_family=AF_INET; my_server_addar.sin_addr.s_addr=htonl(INADDR_ANY); my_server_addar.sin_port=htons(MYSOCKET_PORT); err=bind(ss,(sockaddr*)&my_server_addar,sizeof(my_server_addar)); if(err<0){ cout<<"bind error"<<endl; return -1; } err=listen(ss,MYSOCKET_LISTEN_LENG); if(err<0){ cout<<"listen error"<<endl; return -1; } sockaddr_in my_client_addar; socklen_t addrlen; int sc; pid_t pid; while (true) { addrlen=sizeof(sockaddr); sc=accept(ss,(sockaddr*)&my_client_addar,&addrlen); if(sc<0){ continue; } pid=fork(); if(pid==0){ cout<<"start sub proc"<<pid<<endl; close(ss); proccess_coon_server(sc); }else{ close(sc); } }}void proccess_coon_server(int sc){ ssize_t size=0; char buff[1024]; ostringstream os_str; string result; while (true) { bzero(buff,sizeof(char)*1024); size=read(sc,buff,1024); if(size==0){ return; } cout<<"from client:"<<buff<<endl; os_str.str(""); os_str<<"this is reply for \""<<buff<<"\""; result=os_str.str(); write(sc,result.c_str(),result.length()+1); }}
客户端实例
#include <iostream>using namespace std;#ifdef __cplusplusextern "C" {#endif#include<sys/types.h>#include<sys/socket.h>#include<string.h>#include <arpa/inet.h>#include <unistd.h>#ifdef __cplusplus}#endif#ifndef MYSOCKET_PORT#define MYSOCKET_PORT 8888#endifvoid process_conn_client(int cs);int main(){ sockaddr_in server_addr; int err; int cs=socket(AF_INET,SOCK_STREAM,0); if(cs<0){ cout<<"bind error"<<endl; return -1; } sockaddr_in server_addar; bzero(&server_addar,sizeof(server_addar)); server_addar.sin_family=AF_INET; server_addar.sin_addr.s_addr=htonl(INADDR_ANY); server_addar.sin_port=htons(MYSOCKET_PORT); connect(cs,(sockaddr*)&server_addar,sizeof(server_addar)); process_conn_client(cs);}void process_conn_client(int cs){ string str_in; int out_size; char out_data[1024]; while (true) { cin>>str_in; write(cs,str_in.c_str(),str_in.length()); bzero(out_data,sizeof(char)*1024); out_size=read(cs,out_data,1024); cout<<"from server:"<<out_data<<endl; }}
阅读全文
0 0
- Flex与C#socket通信(二)
- .Net下的Socket编程(c#)(二)
- TCP/IP socket programming in C(二)
- socket编程(二)
- socket(二)
- UDP socket(二)
- socket编程(二)
- socket(二)
- Socket 编程(二)
- socket编程(二)
- Socket服务端(二)
- socket编程(二)
- socket编程(二)
- C++ Socket(二)
- C#.NET网络程序开发的基本类(二)(C#---Socket)
- Java Socket编程(二)Socket基础
- linux网络编程之socket(二):C/S程序的一般流程和基本socket函数
- linux网络编程之socket(二):C/S程序的一般流程和基本socket函数
- 安装node.js之后的操作
- phpstorm:如何设置代码自动换行
- java集合之HashMap的扩容resize
- 大转盘游戏
- Maven+Spring+Spring MVC+MyBatis+MySQL整合SSM框架
- C++ Socket(二)
- console.log与alert
- Latex公式编号、行内公式、公式内空格、长公式换行、行内连加符号
- DrawerLayout:安卓原生侧滑控件的使用
- [算法]3D三角面片与包围盒相交交点求法
- AIML标签
- (ubuntu系列)——备份和还原
- 面向对象的三个基本特征 和 五种设计原则
- Celery消息队列----配置定时任务