linux下的网络程序0——服务器端返回客户端输入
来源:互联网 发布:js时间滑动选择插件 编辑:程序博客网 时间:2024/06/01 16:22
<运行环境centos6.5 qt5.2>
功能:客户端输入什么,服务端就返回什么
代码:
server.cpp:
#include<unistd.h>
#include<stdlib.h>
#include<string.h>
#include<arpa/inet.h>
#include <iostream>
using namespace std;
#define PORT 6000
#define MAX_REQ 5
int main()
{
int listen_socket,client_socket;
struct sockaddr_in local_addr;
struct sockaddr_in client_addr;
int recv_len;
char recv_buf[1024];
if((listen_socket = socket(AF_INET,SOCK_STREAM, 0)) ==-1)
{
cout << "创建server套接字失败~"<< endl;
exit(1);
}
local_addr.sin_family =AF_INET; //!> 代表TCP/IP
local_addr.sin_port =htons(PORT); //!> 端口号( 转化成流格式 )
//!> if此处写上0,那么系统随机选择一个未被使用的端口号
local_addr.sin_addr.s_addr =INADDR_ANY; //!> 填入本机IP地址( INADDR_ANY )
bzero(&(local_addr.sin_zero),8); //!> 填充0保持大小一致
if(bind(listen_socket, (struct sockaddr*)&local_addr, sizeof(struct sockaddr)) ==-1) //!> 将设置好的参数绑定到套接字
{
cout << "server套接字绑定参数失败~"<< endl;
exit(1);
}
else
{
cout << "绑定成功!"<< endl;
}
if(listen(listen_socket, MAX_REQ) ==-1)
{
cout << "监听失败!"<< endl;
exit(1);
}
else
{
cout << "server开始监听!"<< endl;
}
int len =sizeof(struct sockaddr_in);
if((client_socket = accept(listen_socket, (struct sockaddr*)&client_addr,(socklen_t*)&(len ))) == -1)
{
cout<< "server等待请求错误!"<< endl;
exit(1);
}
else
{
cout<< "server正在等待请求!"<< endl;
}
cout<<"收到请求来自IP地址:"<<inet_ntoa(client_addr.sin_addr) <<"端口号:" << ntohs(client_addr.sin_port)<< endl;
while( 1)
{
if((recv_len = recv(client_socket, recv_buf, sizeof(recv_buf), 0)) ==-1) //!> 接收数据
{
cout << "接收错误! "<< endl;
exit(1);
}
recv_buf[recv_len] = '\0';
if((send(client_socket, recv_buf, recv_len, 0)) ==-1) //!> 发送回去
{
cout << "发送错误!"<< endl;
}
if( strcmp( recv_buf, "quit" ) ==0 || strcmp( recv_buf, "q" ) ==0 || strcmp(recv_buf, "exit" ) ==0 )
{
cout<< "结束发送!"<< endl;
exit(1);
}
}
close(listen_socket);
return 0;
}
client.cpp:
#include<unistd.h>
#include<stdlib.h>
#include<string.h>
#include<arpa/inet.h>
#include <iostream>
using namespace std;
#define PORT 6000
int main()
{
int client_socket;
struct sockaddr_in serv_addr;
char buf[1024];
int recv_len;
if((client_socket = socket(AF_INET, SOCK_STREAM, 0)) ==-1)
{
cout << "client创建套接字失败~"<< endl;
exit(1);
}
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(PORT);
serv_addr.sin_addr.s_addr =inet_addr("127.0.0.1");
bzero(&(serv_addr.sin_zero), 8);
if((connect(client_socket, (struct sockaddr*)&serv_addr, sizeof(struct sockaddr))) ==-1)
{
cout << "client连接sever失败~"<< endl;
exit(1);
}else{
cout<<"client connect successful!"<<endl;
}
while(1)
{
cin>>buf;
if((send(client_socket, buf, strlen(buf), 0)) ==-1) //!> 发送回去
{
cout<< "发送错误!"<< endl;
}
if((recv_len = recv(client_socket, buf, sizeof(buf), 0)) ==-1) //!> 接收数据
{
cout << "接收错误! "<< endl;
exit(1);
}
buf[recv_len] = '\0';
if( strcmp(buf, "quit" ) ==0 || strcmp( buf, "q" ) ==0 || strcmp( buf, "exit") ==0 )
{
cout<< "recv finish..."<< endl;
exit( 0);
}
cout<< "返回:"<< buf<< endl;
}
close(client_socket);
return 0;
}
- linux下的网络程序0——服务器端返回客户端输入
- TCP网络程序实例——服务器端与客户端交互
- Linux网络编程(四)——多线程实现简单的聊天(linux 服务器端 windows客户端)
- Go 网络服务器端程序与客户端程序
- Linux网络编程(五)——epoll+多线程实现简单的聊天(linux 服务器端 windows客户端)
- Android网络编程之——Android下菜单系统模块的实现(Android客户端+服务器端Servlet+Mysql)
- 基于UDP的服务器端/客户端---------网络编程(Linux----C)
- Linux网络编程之UDP编程,客户端标准输入给服务器端
- TCP的socket的服务器端和客户端实例(linux下)
- Linux网络编程--客户端连接服务器端
- Linux网络编程-客户端与服务器端通信
- 服务器端返回给客户端的数据格式
- struts的输入验证服务器端与客户端
- linux网络编程之socket(九):使用select函数改进客户端/服务器端程序
- linux网络编程之socket(九):使用select函数改进客户端/服务器端程序
- linux网络编程之socket(九):使用select函数改进客户端/服务器端程序
- 网络编程-TCP服务器端程序和客户端程序
- C++网络编程之——简易的服务器端与客户端
- mysql数据的access denied for user rootlocalhost问题
- linux SSD 硬盘优化
- Evaluate Reverse Polish Notation
- [深夜水一水]POJ 3627Bookshelf
- 自己搭建远程服务器成功,可以远程访问哦
- linux下的网络程序0——服务器端返回客户端输入
- petsc 结构化数据使用
- 【C#小知识】C#中一些易混淆概念总结(二)--------构造函数,this关键字,部分类,枚举
- [leet code] Valid Sudoku
- 蓝桥杯练习题-《道路和航路》解题报告
- [完全背包]HDOJ 1248寒冰王座
- one-to-one外键双向关联之建表
- hdu 2243 ac自动机+矩阵快速幂
- [VB.NET] 多語言文字加密器