导航:首页 > IDC知识 > c服务器端开发教程

c服务器端开发教程

发布时间:2020-10-20 04:07:15

1、用C/C++开发大型高性能服务器需要学习哪些方面的知识

第零步 C语言,推荐:《C语言程序设计:现代方法》
第一步 UNIX/Linux系统编程, 推荐《UNIX环境高级编程:第三版》《Linux/UNIX系统编程手册》
第二步 TCP-IP详解卷一 卷二 卷三
第四步 精研nginx源码,再研究一下skynet,breeze之类
一步一步走下来,没基础的人大概需要3年,有基础的人2年。

2、一个基于javaEE的C/S项目开发完毕,如何部署在WEB服务器,应用服务器和数据库服务器

部署一个BS的应用,一般是有web服务器、应用服务器、数据库服务器,至于文件服务器可以放在应用服务器,如果你开发的系统文件是直接存放在数据库的,那么不需要用到文件服务器。

一般情况下,非大型企业级的应用,web服务器和应用服务器不需要分开,使用tomcat部署即可,tomcat里面既可做应用服务器,也内置了web服务器实现用户请求转发。

至于具体如何部署,你可以去baidu搜索下tomcat部署方法即可。

如果你要说web服务器和应用服务器的区别,通俗来说就是web服务器主要处理静态的请求和转发请求及反馈结果,而应用服务器是处理动态请求。

3、各位大哥,小弟想请问下C/C++服务器端编程是做什么的。需要学些什么。麻烦详细一点。谢谢

C/C++的服务器端,比如我们经常玩的网游,那个服务器端大部分都是C/C++编程的。还有本地连接,网上邻居,ftp协议之类的,基本上windows的客户端网络服务都有对应的服务器。
当然要学习C/C++服务器编程,涉及的方面就比较多了,重要的有网络连接,多线程,数据存储等等的。
你可以参考一下腾讯在C/C++服务器编程工程师的要求。
工作要求:
工作有激情, 认真负责,尽职尽责,沟通协作意识良好,能够承担工作压力,具备良好的学习能力和分析解决问题能力;
全面的软件知识结构(操作系统、数据结构、数据库系统、网络安全),有两年以上互联网应用开发经验,有无线互联网后台开发经验优先;
熟练使用C/C++语言,熟悉Linux下调试、开发环境,对多线程、缓存系统、高性能、高可用系统有经验者优先;
熟悉TCP/IP协议,能熟练使用网络分析工具分析网络相关的故障,有一定的网络编程经验;
熟悉数据库的设计、使用与基本调优,熟练使用mysql数据库进行业务开发;
熟悉Linux,具备Linux下的系统开发经验;
具备大并发、分布式存储、大容量系统开发运营经验优先。

4、C/C++做服务器需要学习什么样的技术

服务器所用到的知识:

TCP/UDP,最基本的

并发——你可以选择使用select、poll,或者是多线程、多进程

如果你使用多线程,那么就必须使用同步技术——信号量、互斥体、条件变量的一种或几种,并且对于多线程技术,你还需要考虑使用进行线程分离与合并,

如果你使用了多进程,那么同步技术就不是你需要考虑的了,你需要考虑的是进程相关的问题了,你是使用fork还是vfork,你该如何处理客户端的请求,如何处理客户端断开连接后保证能够处理完数据并且没有僵尸进程产生,你还需要考虑高并发的问题

你发送接受数据的时候,采用何种方式,是阻塞的还是非阻塞的,还有连接超时、重传等问题

你是选择TCP还是UDP,如果选择UDP你可得忙了,需要你自己去进行重传验证,模拟TCP的三次握手,保证数据不会丢失,保证数据的有序性

还有其他很多需要你考虑的,以上都是指在Linux下的C++,本人对windows C++不了解

推荐书目:UNIX高级环境编程,UNIX网络编程,卷一。C++只不过是你使用这些技术的方式,不管你使用C还是C++,你都可以使用从这两本书中学习到很多有用的知识,但是不能保证你就可以写出高质量的服务器程序。

5、用socket 编程接口编写两个程序,分别为客户程序(client.c)和服务器程序(server.c)

using System.Net;
using System.Net.Sockets;
static void Main(string[] args)//服务器段
{
int port = 2000;
string host = "127.0.0.1";

/**/
///创建终结点(EndPoint)
IPAddress ip = IPAddress.Parse(host);//把ip地址字符串转换为IPAddress类型的实例
IPEndPoint ipe = new IPEndPoint(ip, port);//用指定的端口和ip初始化IPEndPoint类的新实例

/**/
///创建socket并开始监听
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建一个socket对像,如果用udp协议,则要用SocketType.Dgram类型的套接字
s.Bind(ipe);//绑定EndPoint对像(2000端口和ip地址)
s.Listen(0);//开始监听
Console.WriteLine("等待客户端连接");

/**/
///接受到client连接,为此连接建立新的socket,并接受信息
Socket temp = s.Accept();//为新建连接创建新的socket
Console.WriteLine("建立连接");
string recvStr = "";
byte[] recvBytes = new byte[1024];
int bytes;
bytes = temp.Receive(recvBytes, recvBytes.Length, 0);//从客户端接受信息
recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes);

/**/
///给client端返回信息
Console.WriteLine("server get message:{0}", recvStr);//把客户端传来的信息显示出来
string sendStr = "ok!Client send message successful!";
byte[] bs = Encoding.ASCII.GetBytes(sendStr);
temp.Send(bs, bs.Length, 0);//返回信息给客户端
temp.Close();
s.Close();
Console.ReadLine();

}

static void Main(string[] args)//客户端
{
try
{
int port = 2000;
string host = "127.0.0.1";

/**/
///创建终结点EndPoint
IPAddress ip = IPAddress.Parse(host);
//IPAddress ipp = new IPAddress("127.0.0.1");
IPEndPoint ipe = new IPEndPoint(ip, port);//把ip和端口转化为IPEndpoint实例

/**/
///创建socket并连接到服务器
Socket c = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建Socket
Console.WriteLine("Conneting…");
c.Connect(ipe);//连接到服务器

/**/
///向服务器发送信息
string sendStr = "hello!This is a socket test";
byte[] bs = Encoding.ASCII.GetBytes(sendStr);//把字符串编码为字节
Console.WriteLine("Send Message");
c.Send(bs, bs.Length, 0);//发送信息

/**/
///接受从服务器返回的信息
string recvStr = "";
byte[] recvBytes = new byte[1024];
int bytes;
bytes = c.Receive(recvBytes, recvBytes.Length, 0);//从服务器端接受返回信息
recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes);
Console.WriteLine("client get message:{0}", recvStr);//显示服务器返回信息

/**/
///一定记着用完socket后要关闭
c.Close();

}
catch (ArgumentNullException e)
{
Console.WriteLine("argumentNullException: {0}", e);
}
catch (SocketException e)
{
Console.WriteLine("SocketException:{0}", e);
}

Console.WriteLine("Press Enter to Exit");

}

6、请问高手,一般LINU后台服务端开发用C还是C++

一般的服务器,大都属于应用领域。
在Linux/UNIX的应用领域搞开发,还是C++多一些,毕竟开发效率高、维护成本低。

但是靠近底层的部分,如内核、驱动等方面的开发,还是C语言的天下。

7、1、如果做动态网站的开发,以下()可以作为服务器端脚本语言 A、 HTML B、 JSP C、 JavaScript D、 Java

个人觉得是D、JAVA,JavaScript是脚本语言没错,但他针对的是前端的静态页面,就是客户端、浏览器。如果是要作为服务器端的脚本语言,在这个题的选项中只能用JAVA,而jsp是开发动态网页的技术名字,HTML就是写静态页面的语言

8、用C语言编写服务器端和客户机端的关键部分代码!

//服务端 C++
#include "stdafx.h"
#include "stdio.h"
#include "winsock2.h"
#include <vector>
using std::vector;

SOCKET s;
vector<SOCKET> cc;

void onAccept()
{
sockaddr_in sa;
int add_len = sizeof(sa);
SOCKET c = accept(s,(sockaddr*)&sa,&add_len);
if(c!=INVALID_SOCKET)
{
printf("client:%s port:%d connected!\n",inet_ntoa(sa.sin_addr),sa.sin_port);
send(c,"hello",5,0);
cc.push_back(c);
}
else
{
printf("invalid connect\n");
}
}

void onRecv(const fd_set &fs)
{
for(int i=0;i<cc.size();++i)
{
if(FD_ISSET(cc[i],&fs))
{
char buffer[256]={0};
int rc= recv(cc[i],buffer,255,0);
if(rc>0)
{
printf("recv msg:%s\n",buffer);
send(cc[i],buffer,strlen(buffer)+1,0);
}
else if(rc == SOCKET_ERROR)
{
printf("recv msg failed:%d\n",::WSAGetLastError());
closesocket(cc[i]);
cc.erase(cc.begin()+i);
break;
}
}
}
}

int main(int argc, char* argv[])
{
//init
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested = MAKEWORD( 2, 2 );
WSAStartup( wVersionRequested, &wsaData );

s = socket(AF_INET,SOCK_STREAM,0);
if(s!=INVALID_SOCKET)
{
printf("create socket success!\n");
}

{
sockaddr_in sa;
sa.sin_family = AF_INET;
sa.sin_port = htons( 1500 );
sa.sin_addr.s_addr = 0 ; //*²»Ö¸¶¨µØÖ·
int rc = bind(s,(sockaddr *)&sa,sizeof(sa));
if(rc == SOCKET_ERROR)
{
printf("bind failed:%d\n",::WSAGetLastError());
return -1;
}
}

listen(s,SOMAXCONN);

timeval timeout={0,100};

while(true)
{
fd_set fs;
FD_ZERO(&fs);
FD_SET(s,&fs);

int rc = select(0,&fs,0,0,&timeout);
if(rc>0)
{
onAccept();
}
else if(rc == 0)
{
//printf("no connect!\n");
}
else
{
printf("select1 error:%d\n",::WSAGetLastError());
}

if(cc.size()>0)
{
FD_ZERO(&fs);
for(int i=0;i<cc.size();++i)
{
FD_SET(cc[i],&fs);
}

rc = select(0,&fs,0,0,&timeout);
if(rc>0)
{
onRecv(fs);
}
else if(rc == 0)
{
//printf("no recv!\n");
}
else
{
printf("select2 error:%d\n",::WSAGetLastError());
}
}
}

closesocket(s);

//clean
WSACleanup( );
return 1;
}

//=====================[client]====================
#include "stdafx.h"
#include <stdio.h>
#include <winsock2.h>
#include <windows.h>
#include <process.h>

SOCKET c;

unsigned int __stdcall myrecv(void *)
{
while(true)
{
char recv_buffer[256]={0};
int rc =recv(c,recv_buffer,255,0)>0;
if(rc>0)
{
printf("recv:%s\n",recv_buffer);
}
else if(rc==SOCKET_ERROR)
{
printf("recv failed:%d\n",::WSAGetLastError());
break;
}
}
_endthreadex(0);
return 0;
}

int main(int argc, char* argv[])
{
//init
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested = MAKEWORD( 2, 2 );
WSAStartup( wVersionRequested, &wsaData );

c = socket(AF_INET,SOCK_STREAM,0);
if(c!=INVALID_SOCKET)
{
printf("create socket success!\n");
}

//connect
{
sockaddr_in sa;
sa.sin_family = AF_INET;
sa.sin_port = htons( 1500 );
sa.sin_addr.s_addr = inet_addr("127.0.0.1") ; //*²»Ö¸¶¨µØÖ·
int rc = connect(c,(sockaddr *)&sa,sizeof(sa));
if(rc == SOCKET_ERROR)
{
printf("connect failed:%d\n",::WSAGetLastError());
return -1;
}
}

_beginthreadex(0,0,&myrecv,0,0,0);

int count = 0;
timeval timeout={0,100};
while(true)
{
char send_buffer[256]={0};
sprintf(send_buffer,"s%d",count++);
int rc = send(c,send_buffer,strlen(send_buffer),0);
if(rc>0)
{
printf("send:%s\n",send_buffer);
}
else if(rc==SOCKET_ERROR)
{
printf("send failed:%d\n",::WSAGetLastError());
break;
}
}

closesocket(c);
//clean
WSACleanup( );
return 0;
}

9、如何用C语言开发一个通用web服务器?

用C语言开发WEB,可以用C++BUILDER6,称ISAPI,一般人可能做不起来,有点麻烦;
唯一是速度很快,别人看不到源码,掌握了编程套路,也可以开发应用;
缺点:
1。不是解释性语言,做的WEB调试非常麻烦;现在做WEB开发的,用C#、JAVA较多;都是解释性的语言;
2。因为是.DLL的二进制代码,一般商业网站不给予运行的环境,因为网站服务器会被你可能搞瘫,安全性得不到保障;所以,你得自备网页服务器;
3。得不到技术支持,因为没几个人会这种开发;

10、为了项目应用,我要学阿里云服务器开发,有javase基础,我是做c语言嵌入式开发的

首先,要注册域名和购买主机(云服务器)。现在的域名都要实名认证了,若是购买国内的主机,域名还需要进行备案才行。假如没有做备案的准备,可以用香港或者国外主机。
其次,主机购买好后,要搭建好相应的环境。
最后,把项目通过FTP或者其他工具上传到主机(云主机)上,绑定好域名做好解析,就可以实现intent访问了。
楼主如果有域名和服务器上相关问题,可以与我一起交流!

与c服务器端开发教程相关的知识