导航:首页 > IDC知识 > 服务器客户端通信流程

服务器客户端通信流程

发布时间:2020-12-29 08:30:36

1、怎么通过服务器实现客户端与客户端间的通信

客户端指的是什么?软件还是电脑?,这个要看具体需求。你可以先了解下VPN。

2、进程之间的客户端与服务端是如何实现通讯的

首先,为了便于理解,我们一般把网络分为多个层次,这个层次的概念是很重要的基础概念,你可以参考阅读经典的谢希仁老师翻译的《计算机网络》。 在进程之间的网络通信一般都是在“网络层”即IP层,我们编写程序一般也都是基于这个层次或者这个层次之上的传输层或者应用层。语言(实际上是操作系统和库函数)提供了封装好的函数,让我们可以不用关心链路层以及物理层的细节。 下面逐一回答你的问题: 1)初始化网络环境是什么意思,有什么作用? 为了建立通信连接,我们需要明确当前的网络环境是怎样的,因为和单机系统的进程通信不同,网络进程间通信比较复杂,而且操作系统支持的网络协议也会很多,不同协议的工作方式不同,地址格式也不同。为了解决多重协议的识别问题,我们必须引入一些用于区分的概念并对其初始化。 2)套接字的意思和作用是什么? 套接字提供了对网络连接的一系列封装——虽然你可以自己写,但完全没有必要不是么?它根据指定的地址族、数据类型和协议来分配一个套接口的描述字及其所用的资源。例如TCP/IP的socket提供三种类型套接字(流式、数据报、原始),分别对应面向连接的服务(例如FTP)、无连接服务(例如NFS)和较底层的连接服务(例如IP或者自定义协议),你可以基于套接字提供的封装比较方便的实现网络连接服务。 在IP层次以上网络通信的基本原理和电话或者电报的基本原理是非常相近的。TCP连接类似电话,UDP连接类似电报。 下面我以一些代码片段(注意是帮助理解的片段,不能编译执行)简单地对其进行类比: fd = socket(AF_INET, SOCK_STREAM, 0); address.sin_family = AF_INET; address.sin_addr.s_addr = htonl(INADDR_ANY); address.sin_port = htons(1234); address_len = sizeof(address); //这就是在初始化网络环境,类似于你朋友买了一个电话,同时到电信公司申请了号码,然后登记的分机是1234 bind(fd, (struct sockaddr *)&address, address_len); //好了,这是做了一个bind(绑定),类似于电信公司把电话号码和你朋友家的哪个端口线连上了。 listenfd = listen(fd, 64) while(1){ ....一系列等待客户端的操作,从略 } //这里在服务器端一般会有一个无限循环,服务器会一直等待来自客户端的消息,类似于你朋友一直在等待你的电话。客户端,类似的也有买电话(socket创建)和初始化,我就不写了,预先设定好你要拨打的分机号码是1234 rtval = connect(fd, (struct sockaddr *)&address, address_len); //上面的语句表示开始拨打电话了: //如果你的朋友接了电话,通话建立了(上面语句的返回值rtval不为-1),你就可以讲话: writen(fd, (void *)data, strlen(data)); //对方讲话,你听: len = readline(fd, (void *)data2, 100); //讲完了,挂电话,类似于下面的语句: close(fd); 整体情况大概就是这样,所以可以看到计算机的实现和日常生活是很接近的!希望这可以帮助你理解网络通信。 最后建议阅读TCP/IP详解之卷2(实现),里面很多例子不长但很经典,对于打好基础很有帮助。

3、什么是客户端/服务器通信模式

客户端/服务器模式又叫C/S模式,是一种软件系统结构的一种,是基于企业内部网络的应用系统,能够充分发挥客户端的处理能力,对应的优点是客户端响应快,安全性高

4、利用进程通信实现客户机服务器聊天程序的算法流程图和代码

服务器端(注意要先启动服务器端)

import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;

public class server extends Frame implements ActionListener {
Label label = new Label("交谈内容");
Panel panel = new Panel();
TextField tf = new TextField(10);
TextArea ta = new TextArea();
ServerSocket server;
Socket client;
InputStream in;
OutputStream out;

public server() {
super("服务器");
setSize(250, 250);
panel.add(label);
panel.add(tf);
tf.addActionListener(this);
add("North", panel);
add("Center", ta);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
show();
try {
server = new ServerSocket(4000);
client = server.accept();
ta.append("客户机是:" + client.getInetAddress().getHostName() + "\n\n");
in =client.getInputStream();
out= client.getOutputStream();
} catch (IOException ioe) {
}
while (true) {
try {
byte[] buf = new byte[256];
in.read(buf);
String str = new String(buf);
ta.append("客户机说:" + str + "\n\n");
} catch (IOException e) {
}
}
}

public void actionPerformed(ActionEvent e) {
try {
String str = tf.getText();
byte[] buf = str.getBytes();
tf.setText(null);
out.write(buf);
ta.append("我说:" + str + "\n");
} catch (IOException ioe) {
}
}

public static void main(String[] args) {
new server();
}
}

客户端

import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;

public class client extends Frame implements ActionListener {
Label label = new Label("交谈内容");
Panel panel = new Panel();
TextField tf = new TextField(10);
TextArea ta = new TextArea();
Socket client;
InputStream in;
OutputStream out;

public client() {
super("客户机");
setSize(250, 250);
panel.add(label);
panel.add(tf);
tf.addActionListener(this);
add("North", panel);
add("Center", ta);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
show();
try {
client = new Socket(InetAddress.getLocalHost(), 4000);
ta.append("服务器是:" + client.getInetAddress().getHostName() + "\n\n");
in = client.getInputStream();
out = client.getOutputStream();
} catch (IOException ioe) {
}
while (true) {
try {
byte[] buf = new byte[256];
in.read(buf);
String str = new String(buf);
ta.append("服务器说:" + str + "\n");
} catch (IOException e) {
}
}
}

public void actionPerformed(ActionEvent e) {
try {
String str = tf.getText();
byte[] buf = str.getBytes();
tf.setText(null);
out.write(buf);
ta.append("我说:" + str + "\n");
} catch (IOException iOE) {
}
}

public static void main(String args[]) {
new client();
}
}

这个只能在自己一台电脑上先启动服务器再启动客户端才行,要想一台机子启动服务器端一台机子启动客户端需要把客户端的 client = new Socket(InetAddress.getLocalHost(), 4000);改成 client = new Socket("服务器Ip", 4000);(前提是两台机子连在局域网里面的)
没时间写,给你找个,看行不

5、客户端程序和服务器之间通信用的是什么技术?

客户端程序和服务器之间通信用这是网络传输层的问题,在传输层上主要就是两种数据包,即为TCP(可靠连接)、UDP(不可靠连接),这个其实与你想要做的服务器和程序设计没有大的关系,不知道你要搭建什么服务器,是windows还是linux 服务器,在windows下面一般是ASP.net +SQL server (很多人现在也在windows下做apacha+php+mysql); 在linux下面是apacha+php+mysql;网站使用的是HTTP协议来实现网站的建设

6、SQL Server 服务器端和客户端是怎样进行通信的?

默认情况下,SQL Server使用1433端口监听,很多人都说SQL Server配置的时候要把这个端口改变,这样别人就不能很内容易地知道使用容的什么端口了。可惜,通过微软未公开的1434端口的UDP探测可以很容易知道SQL Server使用的什么TCP/IP端口了。不过微软还是考虑到了这个问题,毕竟公开而且开放的端口会引起不必要的麻烦。在实例属性中选择TCP/IP协议的属性。选择隐藏 SQL Server 实例。如果隐藏了 SQL Server 实例,则将禁止对试图枚举网络上现有的 SQL Server 实例的客户端所发出的广播作出响应。这样,别人就不能用1434来探测你的TCP/IP端口了(除非用Port Scan)。

7、采用UDP协议进行通信的服务端和客户端一个大致流程的伪代码?

起2个监听线程分别绑2个端口
在来个线程池
ok
最好用MIna
nio之类的

8、Linux下实现简单的TCP服务器与客户端通信

一直收的那个就不要写输入的代码了,直接无限读取就可以。
一直发的那个就不要写输出的代码版了,直接无限输入就可以;
当然如果想两个都想在服务器和客户端各种实现,那么加入多线程吧。一权个线程只管输入,一个线程只管输出

9、客户端与服务器端具体是怎么通信的,服务器返回的是什么

服务端是架设在服务器上面的
客户端是安装在本地电脑上面的
至于如何通信,主要是通过固定IP、带宽、服务端数据库来实现的。

10、客户端与服务器通信,有哪些方法?

和虚拟主机的只能通过网页的方式post或者get通讯传输数据
毕竟虚拟主机可以使用的功能有限,asp和php都可以实现你想要的功能
估计你是拿来做验证的吧

与服务器客户端通信流程相关的知识