真诚求教!c语言如何写一个服务程序!谢谢!

jiangbai333 2016-04-27 11:19:59
比如 数据库服务开起来! 其他程序可以通过连接这个服务访问数据库!

web 服务开启了 其他程序可以通过连接这个服务访问web站点儿!

ftp服务开启了 其他程序可以通过连接这个服务访问ftp站点儿!


这是通过什么技术实现的呢! 可以给个简单代码么?! 不用带网路的 就本机就行! 比如 我想写一个服务! 这个服务开启后!

我访问这个服务 就输出 123;


谢谢 麻烦给的简单代码
...全文
236 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiangbai333 2016-04-27
  • 打赏
  • 举报
回复
引用 8 楼 qq423399099 的回复:
基本上任何一个程序都可以后台运行,但守护进程是具有特殊要求的程序,比如要脱离自己的父进程,成为自己的会话组长等,这些要在代码中显式地写出来 换句话说,守护进程肯定是后台进程,但反之不成立。守护进程顾名思义,主要用于一些长期运行,守护着自己的职责(监听端口,监听服务等)。我们的系统下就有很多守护进程。 很多系统服务名字后面带个d,就是daemon、守护的意思 (C:/>db start)和(C:/>db user)可以这么理解
谢谢你
小灸舞 2016-04-27
  • 打赏
  • 举报
回复
基本上任何一个程序都可以后台运行,但守护进程是具有特殊要求的程序,比如要脱离自己的父进程,成为自己的会话组长等,这些要在代码中显式地写出来 换句话说,守护进程肯定是后台进程,但反之不成立。守护进程顾名思义,主要用于一些长期运行,守护着自己的职责(监听端口,监听服务等)。我们的系统下就有很多守护进程。 很多系统服务名字后面带个d,就是daemon、守护的意思 (C:/>db start)和(C:/>db user)可以这么理解
jiangbai333 2016-04-27
  • 打赏
  • 举报
回复
引用 1 楼 u010222864 的回复:
学习网络编程
哦 谢谢
jiangbai333 2016-04-27
  • 打赏
  • 举报
回复
引用 4 楼 qq423399099 的回复:
server端:

#include <WINSOCK2.H>

#include <iostream>
using std::cout;
using std::cin;
using std::endl;

#include <string>
using std::string;

#pragma comment(lib,"ws2_32.lib")

void main()
{
	//创建套接字
	WORD myVersionRequest;
	WSADATA wsaData;                    //包含系统所支持的WinStock版本信息
	myVersionRequest = MAKEWORD(1, 1);  //初始化版本1.1
	int err;
	err = WSAStartup(myVersionRequest, &wsaData);
	if (!err){
		printf("已打开套接字\n");
	}
	else{
		//进一步绑定套接字
		printf("套接字未打开!");
		return;
	}
	SOCKET serSocket = socket(AF_INET, SOCK_STREAM, 0);//创建了可识别套接字
	//需要绑定的参数
	SOCKADDR_IN addr;
	addr.sin_family = AF_INET;
	addr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);//ip地址
	addr.sin_port = htons(3000);//绑定端口
	//将套接字绑定到指定的网络地址
	bind(serSocket, (SOCKADDR*)&addr, sizeof(SOCKADDR));//绑定完成
	listen(serSocket, 10);                              //第二个参数代表能够接收的最多的连接数
	SOCKADDR_IN clientsocket;
	int len = sizeof(SOCKADDR);
	SOCKET serConn;
	//等待客户端的连接
	serConn = accept(serSocket, (SOCKADDR*)&clientsocket, &len);
	cout << "客户端" << inet_ntoa(clientsocket.sin_addr) << "已连接" << endl;             //客户端已连接
	while (1) {
		char sendBuf[100];
		sprintf(sendBuf, "server : welcome %s to server.", inet_ntoa(clientsocket.sin_addr));
		//在对应的IP处并且将这行字打印到那里
		send(serConn, sendBuf, strlen(sendBuf) + 1, 0);
		char receiveBuf[100];
		//接收客户端传来的信息
		recv(serConn, receiveBuf, strlen(receiveBuf) + 1, 0);
		char* quit = "quit";
		//如果客户端传来了quit信号,则服务端关闭,客户端也关闭
		if (!strcmp(receiveBuf, quit)) {
			break;
		}
		printf("%s\n", receiveBuf);
	}
	closesocket(serConn);   //关闭
	WSACleanup();           //释放资源的操作
}
client端:

#include <WINSOCK2.H>

#include <iostream>
using std::cout;
using std::cin;
using std::endl;
#include <string>
using std::string;
#include <conio.h>

#pragma comment(lib,"ws2_32.lib")

void main()
{
    int err;
    WORD versionRequired;
    WSADATA wsaData;                            //包含系统所支持的WinStock版本信息
    versionRequired = MAKEWORD(1, 1);           //初始化版本1.1
    //注册WinStock,返回状态
    err = WSAStartup(versionRequired, &wsaData);//协议库的版本信息
    if (!err)                                   //返回结果为0表示初始化失败
    {
        cout << LPSTR("客户端套接字已经打开!\n");
    }
    else
    {
        //调用WSAGetLastError()查看错误信息
        cout << ("客户端套接字打开失败:") << WSAGetLastError() << endl;
        return;//结束
    }
    /*
    创建套接字:
    流式套接字:   SOCK_STREAM , IPPROTO_TCP
    数据报套接字: SOCK_DGRAM  , IPPROTO_UDP
    */
    SOCKET clientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);    //创建流式套接字
    SOCKADDR_IN clientsock_in;                                          //专门针对Internet 通信域的Winsock地址结构
    clientsock_in.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");        //通过inet_addr结构指定套接字的主机IP地址 
    clientsock_in.sin_family = AF_INET;                                 //指定协议家族:AF_INET
    clientsock_in.sin_port = htons(3000);                               //指定将要分配给套接字的传输层端口号:6000

    int fail = connect(clientSocket, (SOCKADDR*)&clientsock_in, sizeof(SOCKADDR));//开始连接
    if (fail){
        cout << "与服务端连接失败!程序将退出..." << endl;
        _getch();
        return;
    }
    string s;
    while (cin >> s){
        char receiveBuf[100];
        //接收数据
        recv(clientSocket, receiveBuf, 101, 0);
        cout << receiveBuf <<endl;
        //发送数据
        send(clientSocket, s.c_str(), s.length() + 1, 0);
        if (s == "quit"){
            break;
        }
    }
    closesocket(clientSocket);
    //关闭套接字
    if (WSACleanup() == SOCKET_ERROR){
        cout << "套接字关闭失败:" << WSAGetLastError() << endl;
    }
    else{
        cout << "套接字成功关闭." << endl;
    }
    _getch();
    return;
}
//inet_addr结构:
/*
Struct in_addr {
Union{
Struct{ u_char s_b1, s_b2, s_b3, s_b4; } S_un_b;
Struct{ u_short s_w1, s_w2; } S_un_w;
U_long  S_addr;
}
}
*/
client端刚连接上以后: client发送了一个hello:
谢谢! 请问 这东西 跟守护进程什么的有关系么?! 我可能打的比方不恰当 就是比如: 数据库程序安装好了! 然后 用一个命令 比如(C:/>db start) 启动了数据库! 之后,这个数据库的服务就一直在运行了是么? 如果想看看数据库有哪些用户 在用一个命令 比如(C:/>db user) 列出了所有用户 这时候 是连接到刚才启动的服务了么? 谢谢
jiangbai333 2016-04-27
  • 打赏
  • 举报
回复
引用 3 楼 zhao4zhong1 的回复:
MSDN98_1.ISO http://pan.baidu.com/s/1dDF41ix, MSDN98_2.ISO http://pan.baidu.com/s/1bnGo0Vl 先下载安装MSDN98 再参考: MSDN98\SAMPLES\VC98\SDK\NETDS\WINSOCK\SIMPLE\SIMPLES.C MSDN98\SAMPLES\VC98\SDK\NETDS\WINSOCK\SIMPLE\SIMPLEC.C
谢谢
小灸舞 2016-04-27
  • 打赏
  • 举报
回复
server端:

#include <WINSOCK2.H>

#include <iostream>
using std::cout;
using std::cin;
using std::endl;

#include <string>
using std::string;

#pragma comment(lib,"ws2_32.lib")

void main()
{
//创建套接字
WORD myVersionRequest;
WSADATA wsaData; //包含系统所支持的WinStock版本信息
myVersionRequest = MAKEWORD(1, 1); //初始化版本1.1
int err;
err = WSAStartup(myVersionRequest, &wsaData);
if (!err){
printf("已打开套接字\n");
}
else{
//进一步绑定套接字
printf("套接字未打开!");
return;
}
SOCKET serSocket = socket(AF_INET, SOCK_STREAM, 0);//创建了可识别套接字
//需要绑定的参数
SOCKADDR_IN addr;
addr.sin_family = AF_INET;
addr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);//ip地址
addr.sin_port = htons(3000);//绑定端口
//将套接字绑定到指定的网络地址
bind(serSocket, (SOCKADDR*)&addr, sizeof(SOCKADDR));//绑定完成
listen(serSocket, 10); //第二个参数代表能够接收的最多的连接数
SOCKADDR_IN clientsocket;
int len = sizeof(SOCKADDR);
SOCKET serConn;
//等待客户端的连接
serConn = accept(serSocket, (SOCKADDR*)&clientsocket, &len);
cout << "客户端" << inet_ntoa(clientsocket.sin_addr) << "已连接" << endl; //客户端已连接
while (1) {
char sendBuf[100];
sprintf(sendBuf, "server : welcome %s to server.", inet_ntoa(clientsocket.sin_addr));
//在对应的IP处并且将这行字打印到那里
send(serConn, sendBuf, strlen(sendBuf) + 1, 0);
char receiveBuf[100];
//接收客户端传来的信息
recv(serConn, receiveBuf, strlen(receiveBuf) + 1, 0);
char* quit = "quit";
//如果客户端传来了quit信号,则服务端关闭,客户端也关闭
if (!strcmp(receiveBuf, quit)) {
break;
}
printf("%s\n", receiveBuf);
}
closesocket(serConn); //关闭
WSACleanup(); //释放资源的操作
}

client端:

#include <WINSOCK2.H>

#include <iostream>
using std::cout;
using std::cin;
using std::endl;
#include <string>
using std::string;
#include <conio.h>

#pragma comment(lib,"ws2_32.lib")

void main()
{
int err;
WORD versionRequired;
WSADATA wsaData; //包含系统所支持的WinStock版本信息
versionRequired = MAKEWORD(1, 1); //初始化版本1.1
//注册WinStock,返回状态
err = WSAStartup(versionRequired, &wsaData);//协议库的版本信息
if (!err) //返回结果为0表示初始化失败
{
cout << LPSTR("客户端套接字已经打开!\n");
}
else
{
//调用WSAGetLastError()查看错误信息
cout << ("客户端套接字打开失败:") << WSAGetLastError() << endl;
return;//结束
}
/*
创建套接字:
流式套接字: SOCK_STREAM , IPPROTO_TCP
数据报套接字: SOCK_DGRAM , IPPROTO_UDP
*/
SOCKET clientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); //创建流式套接字
SOCKADDR_IN clientsock_in; //专门针对Internet 通信域的Winsock地址结构
clientsock_in.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); //通过inet_addr结构指定套接字的主机IP地址
clientsock_in.sin_family = AF_INET; //指定协议家族:AF_INET
clientsock_in.sin_port = htons(3000); //指定将要分配给套接字的传输层端口号:6000

int fail = connect(clientSocket, (SOCKADDR*)&clientsock_in, sizeof(SOCKADDR));//开始连接
if (fail){
cout << "与服务端连接失败!程序将退出..." << endl;
_getch();
return;
}
string s;
while (cin >> s){
char receiveBuf[100];
//接收数据
recv(clientSocket, receiveBuf, 101, 0);
cout << receiveBuf <<endl;
//发送数据
send(clientSocket, s.c_str(), s.length() + 1, 0);
if (s == "quit"){
break;
}
}
closesocket(clientSocket);
//关闭套接字
if (WSACleanup() == SOCKET_ERROR){
cout << "套接字关闭失败:" << WSAGetLastError() << endl;
}
else{
cout << "套接字成功关闭." << endl;
}
_getch();
return;
}
//inet_addr结构:
/*
Struct in_addr {
Union{
Struct{ u_char s_b1, s_b2, s_b3, s_b4; } S_un_b;
Struct{ u_short s_w1, s_w2; } S_un_w;
U_long S_addr;
}
}
*/

client端刚连接上以后:

client发送了一个hello:
赵4老师 2016-04-27
  • 打赏
  • 举报
回复
MSDN98_1.ISO http://pan.baidu.com/s/1dDF41ix, MSDN98_2.ISO http://pan.baidu.com/s/1bnGo0Vl 先下载安装MSDN98 再参考: MSDN98\SAMPLES\VC98\SDK\NETDS\WINSOCK\SIMPLE\SIMPLES.C MSDN98\SAMPLES\VC98\SDK\NETDS\WINSOCK\SIMPLE\SIMPLEC.C
ArthurJava 2016-04-27
  • 打赏
  • 举报
回复
api不行吗
SmallCoder1992 2016-04-27
  • 打赏
  • 举报
回复
学习网络编程

33,321

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧