java写server的简单介绍

博主:adminadmin 2023-01-07 16:24:07 1856

今天给各位分享java写server的知识,其中也会对进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

用java 写出一个Server 和Client 能实现Client发送的消息显示在服务端上,Server发送的信息显示在客户端上

你好!

我写的很简单,你可以在此基础上完善,好了,废话不多说,直入正题。

首先,建立一个项目名为TestChat,然后建两个包,分别为server和client。

server包下建立一个类为Server,一个类为ServerListen。

client包建立一个类Client,一个类为ClentListen。

由于我时间仓促,你自行参考哈。

***********************************************************************

/*

* To change this template, choose Tools | Templates

* and open the template in the editor.

*/

/*

* Server.java

*

* Created on 2011-5-8, 16:37:13

*/

package server;

import java.io.IOException;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import java.net.ServerSocket;

import java.net.Socket;

import java.util.logging.Level;

import java.util.logging.Logger;

/**

*

* @author Study

*/

public class Server extends javax.swing.JFrame {

/** Creates new form Server */

public Server() {

initComponents();

try {

ss = new ServerSocket(8888);

s = ss.accept();

in = new ObjectInputStream(getS().getInputStream());

out = new ObjectOutputStream(getS().getOutputStream());

this.startListen();

} catch (IOException ex) {

Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);

}

}

/** This method is called from within the constructor to

* initialize the form.

* WARNING: Do NOT modify this code. The content of this method is

* always regenerated by the Form Editor.

*/

@SuppressWarnings("unchecked")

// editor-fold defaultstate="collapsed" desc="Generated Code"

private void initComponents() {

jScrollPane1 = new javax.swing.JScrollPane();

messageShow = new javax.swing.JTextArea();

messageInput = new javax.swing.JTextField();

sendBtn = new javax.swing.JButton();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

setTitle("服务器");

messageShow.setColumns(20);

messageShow.setEditable(false);

messageShow.setRows(5);

jScrollPane1.setViewportView(messageShow);

sendBtn.setText("发送");

sendBtn.addMouseListener(new java.awt.event.MouseAdapter() {

public void mousePressed(java.awt.event.MouseEvent evt) {

sendBtnMousePressed(evt);

}

});

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());

getContentPane().setLayout(layout);

layout.setHorizontalGroup(

layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGap(0, 400, Short.MAX_VALUE)

.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 400, Short.MAX_VALUE)

.addComponent(messageInput, javax.swing.GroupLayout.DEFAULT_SIZE, 400, Short.MAX_VALUE)

.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()

.addContainerGap(333, Short.MAX_VALUE)

.addComponent(sendBtn)

.addContainerGap())

);

layout.setVerticalGroup(

layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGap(0, 300, Short.MAX_VALUE)

.addGroup(layout.createSequentialGroup()

.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 201, javax.swing.GroupLayout.PREFERRED_SIZE)

.addGap(18, 18, 18)

.addComponent(messageInput, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)

.addGap(18, 18, 18)

.addComponent(sendBtn)

.addContainerGap(19, Short.MAX_VALUE))

);

pack();

}// /editor-fold

private void sendBtnMousePressed(java.awt.event.MouseEvent evt) {

this.sendMessage();

this.messageInput.setText("");

}

/**

* @param args the command line arguments

*/

public static void main(String args[]) {

java.awt.EventQueue.invokeLater(new Runnable() {

public void run() {

new Server().setVisible(true);

}

});

}

// Variables declaration - do not modify

protected javax.swing.JScrollPane jScrollPane1;

protected javax.swing.JTextField messageInput;

protected javax.swing.JTextArea messageShow;

protected javax.swing.JButton sendBtn;

// End of variables declaration

private ServerSocket ss;

private Socket s;

private ObjectOutputStream out;

private ObjectInputStream in;

private void startListen() {

ServerListen listen = new ServerListen(this);

Thread t = new Thread(listen);

t.start();

}

/**

* @return the s

*/

public Socket getS() {

return s;

}

/**

* @return the out

*/

public ObjectOutputStream getOut() {

return out;

}

/**

* @return the in

*/

public ObjectInputStream getIn() {

return in;

}

/**

* @return the messageShow

*/

public javax.swing.JTextArea getMessageShow() {

return messageShow;

}

private void sendMessage() {

try {

out.writeObject("服务器说");

out.flush();

out.writeObject(this.messageInput.getText().trim());

out.flush();

} catch (IOException ex) {

Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);

}

}

}

用java编写Client和Server程序,实现Client和Server的数据通信。

服务端代码:

import java.io.IOException;

import java.io.InputStream;

import java.net.InetAddress;

import java.net.ServerSocket;

import java.net.Socket;

import java.net.UnknownHostException;

public class Server {

public static void main(String[] args) throws UnknownHostException, IOException {

ServerSocket server = new ServerSocket(2408, 5, InetAddress.getByName("localhost"));

while (true) {

// 等待客户端的连接

Socket clientSocket = server.accept();

// 为每个连接的客户端分配一个线程,与客户端通信

new Thread(new ClientThread(clientSocket)).start();

}

}

}

class ClientThread implements Runnable {

private Socket clientSocket;

public ClientThread(Socket socket) {

this.clientSocket = socket;

}

@Override

public void run() {

try {

InputStream input = clientSocket.getInputStream();

byte[] buffer = new byte[1024];

boolean exit = false;

while(!exit) {

int len = input.read(buffer);

String message = new String(buffer, 0, len);

if ("bye".equals(message)) {

exit = true;

}

System.out.println(clientSocket.getRemoteSocketAddress() + ": " + message);

}

clientSocket.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

客户端代码:

import java.io.IOException;

import java.io.OutputStream;

import java.net.InetAddress;

import java.net.Socket;

import java.net.UnknownHostException;

import java.util.Scanner;

public class Client {

public static void main(String[] args) throws UnknownHostException, IOException {

Scanner scanner = new Scanner(System.in);

Socket socket = new Socket(InetAddress.getByName("localhost"), 2408);

OutputStream output = socket.getOutputStream();

boolean exit = false;

while (!exit) {

String message = scanner.nextLine();

if ("bye".equals(message)) {

exit = true;

}

byte[] data = message.getBytes();

output.write(data);

output.flush();

}

socket.close();

}

}

我想用java写一个简单的web server,应该怎么写呀?

我原来写过一个很简单的,可以指定你存放网页的文件夹,可以指定允许访问的IP,给你源码看看吧。public class WebServer {

static Button btReloadIP=new Button("更新合法IP列表");

static Button btAllow=new Button("允许此IP");

static Button btRepel=new Button("拒绝此IP");

static JTextField tfNewIP=new JTextField(20);

static JPanel pane=new JPanel();

static JTextField tfState=new JTextField(25);

static TextField tfURL=new TextField("G:\\webServer2\\",28);

static TextField tfPort=new TextField("10288",3);

static Button btStart=new Button("启动服务器");

static Button btStop=new Button("停止服务器");

private static int IPnum=0;

public static boolean IPadmin=false;

static boolean click=false;

private static String url;

private static String[] checkIP=new String[255];

private static Thread serverThread=null;

private static Socket connectionSocket=null;

private static ServerSocket listenSocket=null;

public WebServer() throws IOException{

serverThread=new Thread(new Runnable(){

public void run(){

try {

listenSocket = new ServerSocket(Integer.parseInt(tfPort.getText()));

} catch (IOException e) { }

while(true){

try {

connectionSocket=listenSocket.accept();

@SuppressWarnings("unused")

webClient client=new webClient(connectionSocket);

} catch (IOException e) {

}

}

}

});

}

public static void main(String args[])throws Exception{

GUI();

}

public static void GUI(){

JFrame f=new JFrame("小白兔Web服务器(BY 丁寻)");

f.setSize(300,200);

f.setLocation(500, 300);

f.getContentPane().add(pane,BorderLayout.CENTER);

f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

f.setVisible(true);

//不可以变大变小

f.setResizable(false);

pane.add(new JLabel("端口号:"));

pane.add(tfPort);

pane.add(btStart);

pane.add(btStop);

pane.add(new JLabel("配置路径"));

pane.add(tfURL);

pane.add(tfState);

pane.add(new JLabel("新IP请求"));

pane.add(tfNewIP);

pane.add(btAllow);

pane.add(btRepel);

pane.add(btReloadIP); btStart.addActionListener(new Listener());

btStop.addActionListener(new Listener());

btAllow.addActionListener(new Listener());

btRepel.addActionListener(new Listener());

btReloadIP.addActionListener(new Listener());

}

static class Listener implements ActionListener {

@SuppressWarnings("deprecation")

public void actionPerformed(ActionEvent event) {

if(event.getActionCommand()=="启动服务器"){

try {

url=tfURL.getText();

readIP();

tfState.setText("服务器已经启动......地址:"

+InetAddress.getLocalHost().toString());

} catch (Exception e) {

e.printStackTrace();

} try {

new WebServer();

} catch (IOException e) {

e.printStackTrace();

} serverThread.start(); btStart.setEnabled(false);

tfPort.setEditable(false);

btStop.setEnabled(true);

tfURL.setEditable(false);

btReloadIP.setEnabled(true);

}

if(event.getActionCommand()=="停止服务器"){

serverThread.stop();

tfState.setText("服务器已经停止");

btStart.setEnabled(true);

tfPort.setEditable(true);

btStop.setEnabled(false);

tfURL.setEditable(true);

btReloadIP.setEnabled(false);

}

if(event.getActionCommand()=="允许此IP"){

IPadmin=true;

//serverThread.start();

click=true;

btAllow.setEnabled(false);

btRepel.setEnabled(false);

tfNewIP.setText(null);

}

if(event.getActionCommand()=="拒绝此IP"){

click=true;

IPadmin=false;

//serverThread.start();

btAllow.setEnabled(false);

btRepel.setEnabled(false);

tfNewIP.setText(null);

}

if(event.getActionCommand()=="更新合法IP列表"){

try {

readIP();

} catch (IOException e) {

// e.printStackTrace();

}

}

}

}

public static void readIP() throws IOException{

int i=0;

byte[] ips = new byte[65535];

File IPfile=new File(url+"checkIP.txt");

FileInputStream fileReader=new FileInputStream(IPfile);

fileReader.read(ips);

fileReader.close();

String strip=new String(ips);

StringTokenizer getIP=new StringTokenizer(strip,System.getProperty("line.separator"));

for(;;){

if(getIP.hasMoreTokens()){

checkIP[i]=getIP.nextToken();

System.out.println(checkIP[i]);

i++;

}

else{break;}

}

IPnum=i;

}

public static void disconnect(webClient c){

try {

//c.stop();

c.socket.close();

c.socket=null;

c=null; } catch (IOException e) {

e.printStackTrace();

}

//

}

class webClient extends Thread{

boolean check=true;

boolean send=false;

Socket socket;

BufferedReader inFromClient=null;

DataOutputStream outToClient=null;

String fileName;

String requestMessageLine;

StringTokenizer tokenizedLine=null;

FileInputStream inFile=null;

byte[] fileInBytes=null;

int numOfBytes=0;

File afile=new File(url+"log.html");

byte[] b;

public webClient(Socket s) throws IOException{

FileOutputStream out=new FileOutputStream(afile,true);

StringBuffer str=new StringBuffer();

SimpleDateFormat formatter=new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");

String time=formatter.format(new Date());

socket=s;

str.append(time+" Client_IP:"+socket.getInetAddress().toString()+

" Client_Port:"+socket.getPort()+"br"+

System.getProperty("line.separator")

);

b=(new String(str)).getBytes();

System.err.println(new String(str));

out.write(b);

out.close();

inFromClient=new BufferedReader(new

InputStreamReader(socket.getInputStream()));

outToClient=new DataOutputStream(socket.getOutputStream());

if(!checkIP(socket)){

String strWait="html" +

"title等待验证/title" +

"body正在等待管理员验证您的IP是否合法,请稍候......brbr" +

"(如果页面没有自动跳转,请每5秒钟刷新一次," +

"以判断管理员是否已经允许您进入)/body" +

"/html";

byte[] waiting=strWait.getBytes();

outToClient.writeBytes("HTTP/1.1 200 Document Follows\r\n");

outToClient.writeBytes("Content-Type: text/html\r\n");

outToClient.writeBytes("Content-Length: "+waiting.length+"\r\n");

outToClient.writeBytes("\r\n");

outToClient.write(waiting,0,waiting.length);

if(!admin()){

return;

}

WebServer.IPadmin=false;

}

this.start(); }

public void receive() throws IOException{

while(socket!=null){

requestMessageLine=inFromClient.readLine();

if(requestMessageLine.length()==0){break;}

System.out.println(requestMessageLine);

tokenizedLine=new StringTokenizer(requestMessageLine);

if(tokenizedLine.hasMoreTokens()){

String strhead=tokenizedLine.nextToken();

if(strhead.equals("GET")){

send=true;

fileName=tokenizedLine.nextToken();

if(fileName.equals("/")){

fileName="index.html";

}

else if(fileName.startsWith("/")){

fileName=fileName.substring(1);

fileName=fileName.replace("%5C", "/");

fileName=fileName.replace("%20", " ");

//如果是文件 ,不要check

check=false;

}

}//endnexttoken

if(check){

if(strhead.equals("User-Agent:")){

if(requestMessageLine.contains("Firefox/3")){

System.err.println("true");

}

else{

System.err.println("false");

fileName="ERROR.html";

send=true;

}

}

}

//....

}//endhastoken

}//endwhile

if(send){

readFile();

send(fileInBytes, numOfBytes);

} }

public void send(byte[] fileInBytes,int numOfBytes) throws IOException{

outToClient.writeBytes("HTTP/1.1 200 Document Follows\r\n"); if(fileName.endsWith(".jpg")){

outToClient.writeBytes("Content-Type: image/jpg\r\n");

}

else if(fileName.endsWith(".gif")){

outToClient.writeBytes("Content-Type: image/gif\r\n");

}

else if(fileName.endsWith(".wmv")){

outToClient.writeBytes("Content-Type: video/x-ms-wmv\r\n");

}

else if(fileName.endsWith(".avi")){

outToClient.writeBytes("Content-Type: video/avi\r\n");

}

else if(fileName.endsWith(".html")||fileName.endsWith(".htm")){

outToClient.writeBytes("Content-Type: text/html\r\n");

}

outToClient.writeBytes("Content-Length: "+numOfBytes+"\r\n"); outToClient.writeBytes("\r\n");

outToClient.write(fileInBytes,0,numOfBytes);

}

//得到文件

public void readFile() throws IOException{

File file=new File(url+fileName);

b=(" Client_Request:"+fileName+"br"+

System.getProperty("line.separator")).getBytes();

FileOutputStream out=new FileOutputStream(afile,true);

out.write(b);

out.close();

numOfBytes=(int)file.length();

inFile=new FileInputStream(url+fileName);

fileInBytes=new byte[numOfBytes];

inFile.read(fileInBytes);

inFile.close(); }

public boolean checkIP(Socket skt){

for(int i=0;iWebServer.IPnum;i++){

if(skt.getInetAddress().toString().equals(checkIP[i])){

return true;

}

}

return false;

}

public boolean admin() throws IOException{

WebServer.tfNewIP.setText("IP:"+socket.getInetAddress().toString()+

" PORT:"+socket.getPort());

WebServer.btAllow.setEnabled(true);

WebServer.btRepel.setEnabled(true);

while(!click){}

click=false;

if(WebServer.IPadmin){

File IPFile=new File(url+"checkIP.txt");

FileOutputStream appIP=new FileOutputStream(IPFile,true);

byte[] ips=(socket.getInetAddress().toString()+

System.getProperty("line.separator")).getBytes();

appIP.write(ips);

appIP.close();

//WebServer.readIP();

WebServer.checkIP[IPnum]=socket.getInetAddress().toString();

WebServer.IPnum++;

return true;

}

else{

WebServer.disconnect(this);

return false;

}

}

public void run(){

try {

receive();

} catch (IOException e) {

}

WebServer.disconnect(this);

}

}}

Java 和其它语言之间怎么进行Socket通信?用JAVA编写server,C语言编写Client,可以实现吗?怎么实现?

本答案提交时间:2011-6-12 17:17

Java 和其它语言之间进行Socket通信使用Socket和ServerSocket类。

用JAVA编写server,C语言编写Client,当然可以实现通信(示例在最后)。

1、Socket和ServerSocket类库位于java.net包中。ServerSocket用于服务器端,Socket 是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。不管是Socket还是ServerSocket它们的工作都是通过SocketImpl类及其子类完成的。

重要的Socket API:

java.net.Socket继承于java.lang.Object,有八个构造器,其方法并不多,使用频繁的三个方法:

. Accept方法用于产生"阻塞",直到接受到一个连接,并且返回一个客户端的Socket对象实例。"阻塞"是一个术语,它使程序运行暂时"停留"在这个地方,直到一个会话产生,然后程序继续;通常"阻塞"是由循环产生的。

. getInputStream方法获得网络连接输入,同时返回一个IutputStream对象实例,。

. getOutputStream方法连接的另一端将得到输入,同时返回一个OutputStream对象实例。

注意:其中getInputStream和getOutputStream方法均会产生一个IOException,它必须被捕获,因为它们返回的流对象,通常都会被另一个流对象使用。

2.如何开发一个Server-Client模型的程序

开发原理:

服务器,使用ServerSocket监听指定的端口,端口可以随意指定(由于1024以下的端口通常属于保留端口,在一些操作系统中不可以随意使用,所以建议使用大于1024的端口),等待客户连接请求,客户连接后,会话产生;在完成会话后,关闭连接。

客户端,使用Socket对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;会话完成后,关闭Socket。客户端不需要指定打开的端口,通常临时的、动态的分配一个1024以上的端口。

下面这个程序用JAVA建立了一个服务器,它一直监听10000端口,等待用户连接,而用户端则可以使用C写的程序来连接该服务器。

本程序在建立连接后给客户端返回一段信息,然后结束会话。这个程序一次只能接受一个客户连接。

import java.net.*;

import java.io.*;

public class Server

{

private ServerSocket ss;

private Socket socket;

private BufferedReader in;

private PrintWriter out;

public Server()

{

try

{

ss = new ServerSocket(10000);

while (true)

{

socket = ss.accept();

in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

out = new PrintWriter(socket.getOutputStream(),true);

String line = in.readLine();

out.println("you input is :" + line);

out.close();

in.close();

socket.close();

}

ss.close();

}

catch (IOException e)

{}

}

public static void main(String[] args)

{

new Server();

}

}

怎样用java写server端?

1.了解一下什么是HTTP协议,什么是GET请求,什么是POST请求。

学会使用一些工具查看HTTP请求:

Firefox的firebug

Chrome的F12

使用curl命令发请求和调试

2.Java相关

学习一下Java的ServletAPI

war工程的结构,比如WEB-INF是干什么用的,如何写web.xml

如何在tomcat上部署war

如何使用Maven或eclipse管理war工程

关于java写server和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。