服务器实例
#include <iostream>
#include<sstream>
using namespace std;
#ifdef __cplusplus
extern "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
#endif
void 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 __cplusplus
extern "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
void 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;
}
}