java服务器端
㈠ java客户端与服务器端
没有描述清楚。按照字面理解,服务端根据客户端发送的信息判断是否发送文件是吗?服务器端根据客户端请求的信息,如果要返回文件,服务器端读取文件向客户端写文件,比如读取文件向客户端写字节流。客户端肯定是不能直接访问服务器端文件的。如果文件是放在可以公开访问的地址,返回地址,客户端下载就是了。所以你的问题没有描述清楚。
㈡ java服务器开发是做什么和web端的区别是什么
web开发,是开发服务端的,开发好的web程序,打包成war,然后放到web容器中运行,而web容器,是部署在服务器中的。
web的客户端就是浏览器,教你设计页面,学CSS/HTML之类的。
标准的web服务器只具有与客户端浏览器通讯的功能,不能处理业务逻辑请求。
需要编写程序来复制处理客户端的请求。通过组件来处理客户端的请求,这个组件就是实现特定规范的可以单独部署的软件模块。组件必须通过容器来实现。容器是实现特定规范的程序,负责组件的运行环境和管理组件的生命周期。tomcat,weblogic都提供了容器。
web端可以理解为tomcat,并且tomcat中运行着你编写的程序,这个程序称为web应用。
java服务器开发就是通过java语言来编写程序,组合成web应用,将来部署到tomcat中,
编写的这些程序就是组件,用来处理客户端请求的。为了高效还会使用一些框架和技术来配合java程序,比如SpringMVC,struts2,Servlet。
㈢ 服务器端为什么用java开发
服务器端用java开发,不快也不容易。使用java无非是更看重java的跨平台性、安全性,或许多少带有些个人喜好,会显得高大上一些,没人强制你必须使用java。
㈣ java服务器接收客户端请求怎样实现的
服务器端代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
/**
* Socket通讯服务器端
* @author 米强
*
*/
public class ServerMain {
public ServerMain() {
try {
// 构造服务器ServerSocket对象,参数为服务器端开放的端口号
ServerSocket ss = new ServerSocket(30102);
System.out.println("服务器准备就绪!");
// 死循环可以使服务器持续处于接收客户端状态
while(true){
// 该方法使程序阻塞,等待客户端的链接,当监听到客户端的链接,创建一个Socket对象与客户端单独会话
Socket s = ss.accept();
// 为了不影响服务器监听其它客户端,这里开启了一个线程,由线程处理与这个客户端的会话
new ServerThread(s).start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new ServerMain();
}
}
/**
* 服务器端与客户端会话的线程
*/
class ServerThread extends Thread {
private Socket s = null;
private BufferedReader read = null;
private PrintStream print = null;
public ServerThread(Socket s) {
this.s = s;
try {
// 从Socket中获取输入流和输出流,由于我们只做一个简单的字符串通讯,所以采用BufferedRead和PrintStream来封装输入、输出流
read = new BufferedReader(new InputStreamReader(s.getInputStream()));
print = new PrintStream(s.getOutputStream());
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 线程的运行run方法
*/
public void run() {
try {
String message = null;
// 这里循环可以使服务器持续的接收客户端信息。read.readLine()通过输入流读取一段字符串,赋值给message变量,如果message字符串不为“exit”则循环,否则结束循环
while (!(message = read.readLine()).equals("exit")){
// 将字符串前面添加“返回:”,再发回客户端
print.println("返回:" + message);
}
} catch (IOException e) {
} finally {
// 在 finally 代码块中无论如何都会执行下面代码:
try {
// 如果没有关闭Socket
if(!s.isClosed()){
// 关闭Socket链接
s.close();
}
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
}
客户端代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
/**
* Socket通讯客户端
* @author 米强
*
*/
public class ClientMain {
public ClientMain() {
try {
// 构造与服务器通讯的Socket对象,参数为服务器IP地址(String)和端口号(int),端口号需要和服务器端开放的端口号对应
Socket s = new Socket("192.168.1.100", 30102);
// 启动一个线程与服务器通讯,并把链接服务器的Socket对象传递过去
new LinkThread(s).start();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new ClientMain();
}
}
/**
* 与服务器通讯的线程
*/
class LinkThread extends Thread {
private Socket s = null;
// 输出流
private PrintStream out = null;
// 缓冲输入流
private BufferedReader in = null;
// 录入文字的Scanner对象
private Scanner scanner = null;
public LinkThread(Socket s) {
// 将Socket对象实例保存在全局变量中,因为run方法中我们还要用它断开链接
this.s = s;
try {
// 从Socket中获取输入流和输出流,由于我们只做一个简单的字符串通讯,所以采用BufferedRead和PrintStream来封装输入、输出流
out = new PrintStream(s.getOutputStream());
in = new BufferedReader(new InputStreamReader(s.getInputStream()));
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 线程的运行run方法
*/
public void run() {
// 构造Scanner对象
scanner = new Scanner(System.in);
System.out.println("提示:如果要结束本次会话,请输入“exit”指令!");
try {
// 死循环可以使客户端不断的向服务器发送信息,不用担心循环无法结束,后面的return语句可以结束整个线程。
while(true){
// 提示用户输入文字
System.out.print("请输入:");
// 将用户输入的字符串保存在message变量中
String message = scanner.nextLine();
// 通过输出流发送字符串
out.println(message);
// 清空缓冲,强制输出
out.flush();
// 获取服务器返回的字符串
String str = in.readLine();
// 如果返回的字符串存在
if(str != null){
// 显示在控制台
System.out.println(str);
}else{
// 提示会话结束,并结束线程
System.out.println("本次会话结束!");
return;
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
// 在 finally 代码块中无论如何都会执行下面代码:
try {
// 如果没有关闭Socket
if(!s.isClosed()){
// 关闭Socket链接
s.close();
}
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
}
㈤ java里面什么是服务器端编程
你写的程序放在服务器电脑上运行,叫做服务器端编程。
既然是叫做服务器,也说明你写的程序要可以接受客户端的互动。
你写的程序放在客户端上运行,叫做客户端编程。
㈥ java 服务器怎样给客户端传输数据
java需要利用scoket实现网络通信,在通信时可以利用是从客厅、获取输入输出流达到传输数据效果
㈦ JAVA的服务器和客户端怎么做
楼上的太长了吧,我写个简单的
import java.net.*;
import java.io.*;
import java.util.*;
/**
* TCP协议下单向通信的客户端程序。
* @author new
*
*/
public class TCPClientA {
public static void main(String[] args) {
Socket s=null;
try {
s=new Socket("127.0.0.1",8888);
BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));
String str=br.readLine();
System.out.println(str);
} catch (Exception e) {
e.printStackTrace();
}finally{
if(s!=null)try{s.close();}catch(IOException e){}
}
}
}
================================
import java.net.*;
import java.io.*;
import java.util.*;
/**
* TCP协议下单向通信的服务器端程序。
* @author new
*
*/
public class TCPServerA {
public static void main(String[] args) {
ServerSocket ss=null;
Socket s=null;
PrintStream ps=null;
try {
ss=new ServerSocket(8888);
while(true){
System.out.println("服务器已启动,在8888端口:");
s=ss.accept();
System.out.println("得到 "+s.getInetAddress()+" 的连接请求...");
ps=new PrintStream(s.getOutputStream());
ps.println(new Date());
ps.flush();
System.out.println("已向客户端发送数据!");
}
} catch (IOException e) {
e.printStackTrace();
}finally{
if(ps!=null)ps.close();
if(s!=null)try{s.close();}catch(IOException e){}
if(ss!=null)try{ss.close();}catch(IOException e){}
}
}
}
㈧ java服务器端用传输给客户端文件流(fileinputstream),客户端应该如何接收(socket )
其实这个问题你应该先想一下socket到底是一个什么东西,在网络编程中socket到底用来做什么的。socket:在操作系统内核中它代表网络连接的一个端点(endpoint),在应用程序中它代表一个打开的文件。socketpair唯一确定的一条网络连接,socketpair就是客户端socket和服务端socket的一个组合。也就是客户端ip和port与服务端ip和port的组合。一条网络连接也就是一条通信的信道,tcp连接代表的信道是全双工的。以信道来讲,逻辑上就存在两个管道来代表输出与输入来发送和接收信息。
那么在应用程序上我们就可以拿到这2个管道来完成socket之间的通信。
以你的应用来看输出流fos就代表着图中的红色管道,那么在服务端就应该是这个样的。
ScoketconnSock=serverSocket.accept();//connSock代表着服务端的Socket
InputStreamis=connSock.getInputStream();//输入流is代表图中的红色管道
OutputStreaos=connSock.getOutputStream();//输出流os代表图中的绿色管道
在服务端有一个字节缓冲区来存放从is读取的字节数据
byte[]buffer=newbyte[1024];
然后服务端读取数据来填充这个字节缓冲区
is.read(buffer);//比如这样
然后就根据你的需求来操作这个buffer了。
然后把处理过后的数据通过os发送给客户端。os就是图中的那个绿色管道
os.write(处理过后的数据);
㈨ 用java编写app的服务器端要学哪些东西
首先,App的服务端跟Web的服务端没有多大区别,而且在实际的开发过程中,业务逻辑也都是共用一套,只是会针对不同的客户端做不同的适配(这点可参考Amazon,其对PC的web端,移动的Web端,移动的App都做了不同程度的适配).
其次,既然与Web的服务端没多大区别,那所用的技术也大同小异,对于App而言,服务端更多是一个数据接口,所以框架页大同小异;
最后,大致总结一下:
技术:
网络通信: tcp,http等;
Web服务:servlet, cgi脚本,asp等;
系统调度:多线程,并发等;
框架:
对应不同的web服务技术,采用的编程语言不同;
对应不同的网络通信协议,采用的框架也不同,netty->tcp,servlet等web服务框架->http等;
对应系统调度,有不同的多线程,多进程通信框架等;
对应提供不同的服务接口,有web service和restful两大类,前者基于soap协议,后者基于http协议,对应的框架就很多,不一一叙述;