1、Java 服務端和客戶端的通信
有兩種方法:
客戶端和服務端創建兩個連接,一個連接用於發消息,一個連接用於發文件。專
客戶端和服屬務端使用同一個連接,數據不要直接發出去,按照一定的格式制訂一個協議,數據一塊一塊的發,每塊前面加上塊類型和長度,類型表明發送的是消息數據還是文件數據。
2、java代碼TCP/IP網路通信伺服器客戶端,實現雙方信息交互。
package com.weixin.test;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import org.junit.Test;
public class ScoketTest {
@Test
public void client() throws Exception{
InetAddress i=InetAddress.getByName("127.0.0.1");
Socket s=new Socket(i, 9000);
OutputStream outputStream = s.getOutputStream();
outputStream.write("服務端你好,我是客戶端哦!".getBytes());
s.shutdownOutput();
InputStream inputStream=s.getInputStream();
int length=0;
byte[] bytes=new byte[1024];
while ((length=inputStream.read(bytes))!=-1) {
System.err.println(new String(bytes,0,length));
}
inputStream.close();
outputStream.close();
s.close();
}
@Test
public void server() throws Exception{
ServerSocket serverSocket=new ServerSocket(9000);
Socket socket = serverSocket.accept();
InputStream inputStream = socket.getInputStream();
OutputStream outputStream = socket.getOutputStream();
int length=0;
byte[] bytes=new byte[1024];
while ((length=inputStream.read(bytes))!=-1) {
System.err.println(new String(bytes, 0,length));
}
outputStream.write("客戶端你好,本王已收到!".getBytes());
outputStream.close();
inputStream.close();
socket.close();
serverSocket.close();
}
}
3、java rmi怎樣實現伺服器間的通信
有幾個建議
1:主伺服器不用主動發IP給子伺服器(主伺服器不可能知道子伺服器的數目),也沒有必要主服務來發,完全可以讓子伺服器來主動向主服務索取IP。
2:結果完全沒有必要以文件形式存放(每次開機要重新獲得,沒有必要做持久化),完全可以存到一個Set中。
根據以上:我做一個簡單的實現:
***********************************************
IHost.java
package test.rmi.host;
import java.rmi.RemoteException;
/**
* remote interface
*
*/
public interface IHost extends java.rmi.Remote
{
void register(String ip) throws RemoteException;
String[] getAllSubServerList() throws RemoteException;
}
***********************************************
Host.java
package test.rmi.host.impl;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.util.HashSet;
import java.util.Set;
import test.rmi.host.IHost;
/**
*
* the implentation class of Ihost
*
*/
public class Host extends UnicastRemoteObject implements IHost
{
private static final long serialVersionUID = -2197983171132594422L;
private Set<String> subServers = new HashSet<String>();
public Host() throws RemoteException
{
super();
}
public String[] getAllSubServerList() throws RemoteException
{
String[] ips = new String[] {};
synchronized (this)
{
ips = subServers.toArray(ips);
}
return ips;
}
public void register(String ip) throws RemoteException
{
synchronized (this)
{
subServers.add(ip);
}
}
}
***********************************************
ServiceStartup.java
package test.rmi.host;
import java.rmi.Naming;
import test.rmi.host.impl.Host;
/**
* The main class for Host server,mainly for start up the host
*
*/
public class ServiceStartup
{
public static void main(String args[]) throws Exception
{
Host host = new Host();
Naming.rebind("HostServer", host);
}
}
***********************************************
SubServerStartup.java
package test.rmi.sub;
import java.net.InetAddress;
import java.rmi.Naming;
import test.rmi.host.IHost;
/**
* The main class for Sub server,mainly for start up the sub
*
*/
public class SubServerStartup
{
public static void main(String args[]) throws Exception
{
String hostIp = "";
IHost host = (IHost) Naming.lookup("rmi://" + hostIp + "/HostServer");
String myIp = InetAddress.getLocalHost().toString();
host.register(myIp);
//do something...
try{
//wait for other sub server start up
Thread.sleep(3000);
}catch(Exception e){}
String[] allSubServer = host.getAllSubServerList();
//do something...
}
}
***********************************************
本實現只是提供一個簡單的思路和基本的技術實現,希望可以幫助到你
以上代碼已經可以運行了,你說的具體點,是哪方面?是如何運行rmi程序嗎?
4、兩java服務端之間通信方式有哪些
JAVA進程間通信的方法主要有以下幾種: (1)管道(Pipe):管道可用於具有親緣關系進程版間的通權信,允許一個進程和另一個與它有共同祖先的進程之間進行通信。 (2)命名管道(named pipe):命名管道克服了管道沒有名字的限制
5、java網路編程應該怎樣在客戶端和伺服器間實現通信?
以前寫的,照貼了。。。伺服器端:import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.*;
import java.net.*;/*6、 採用UDP協議,編寫一個Java網路應用程序,該應用分伺服器端程序和客戶端程序兩部分。
* 客戶端指定一個伺服器上的文件名,讓伺服器發回該文件的內容,或者提示文件不存在。
* (20分)(服務端程序和客戶端程序分別命名為Server.java和Client.java)*/
public class N4BT6 extends Frame
{
DatagramSocket socket ;
DatagramPacket packet ;byte[] buf ;
File file ;
FileInputStream input;
String message = "該文件不存在";
TextArea text;
public N4BT6(String title)
{
super(title);
text = new TextArea(6,4);
add(text);
setSize(400, 300);
setVisible(true);
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
dispose();
}
});
buf = new byte[1024];
try
{
socket = new DatagramSocket(1230);
packet = new DatagramPacket(buf, buf.length);
socket.receive(packet);
file = new File(new String(packet.getData()));
socket = new DatagramSocket();
}
catch (Exception e)
{e.printStackTrace();
}
if(file.exists())
{
try
{
buf = new byte[(int)file.length()];
packet = new DatagramPacket(buf,buf.length,InetAddress.getLocalHost(),1234);
input = new FileInputStream(file);
input.read(buf);
socket.send(packet);
}
catch (IOException e)
{
e.printStackTrace();
}
}
else
{
try
{
packet = new DatagramPacket(message.getBytes(),message.getBytes().length,
InetAddress.getLocalHost(),1234);
socket.send(packet);
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
public static void main(String[] args)
{
new N4BT6("Server");
}
}
客戶端:import java.awt.*;
import java.awt.event.*;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;public class N4BT6_2 extends Frame
{
TextArea text;
String message = "Q.txt";
DatagramSocket socket ;
DatagramPacket packet;
byte[] buf;
public N4BT6_2(String title)
{
super(title);
text = new TextArea(6,4);
add(text);
setSize(400, 300);
setVisible(true);
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
dispose();
}
});
try
{
socket = new DatagramSocket();
packet = new DatagramPacket(message.getBytes(),message.getBytes().length,
InetAddress.getLocalHost(),1230);
socket.send(packet);
}
catch (Exception e)
{
e.printStackTrace();
}
try
{
buf = new byte[1024];
socket = new DatagramSocket(1234);
packet = new DatagramPacket(buf,buf.length);
socket.receive(packet);
text.append(new String(buf));
}
catch (Exception e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
new N4BT6_2("Client");
}
}
6、java 網路編程: 如何實現客戶端與客戶端之間的之間通信
(1)服務來器首先啟動監聽程源序,對指定的埠進行監聽,等待接收客戶端的連接請求。
(2)客戶端程序啟動,請求連接伺服器的指定埠。
(3)伺服器收到客戶端的連接請求後與客戶端建立套接字連接。
(4)連接成功後,客戶端與伺服器分別打開兩個流,其中客戶端的輸入流連接到伺服器的輸出流,伺服器的輸入流
連接到客戶端的輸出流,兩邊的流建立連接後就可以雙向的通信了。
(5)當通信完畢後客戶端與伺服器端兩邊各自斷開連接。
7、java網路編程,怎樣在客戶端和伺服器間實現通信。
寫個簡單點的伺服器跟客服端就行了我寫了個很簡單的,只能在一個客戶端跟一個伺服器通信,在控制台輸入下面這個是伺服器import java.io.*;
import java.net.*;
import java.util.Scanner;public class Server
{
public static void main(String[] args)
{
try {
ServerSocket server=new ServerSocket(8888);//定義客戶端的埠號
Socket client=server.accept();//定義一個Socket對象
InputStream is=client.getInputStream();//伺服器接受信息輸入流,也就是接受從伺服器段發送過來的消息
BufferedReader br=new BufferedReader(new InputStreamReader(is));//用bufferedreader包裝下輸入流
OutputStream os=client.getOutputStream();//這是用來給伺服器發送消息的輸出流
PrintStream ps=new PrintStream(os);
Scanner scanner=new Scanner(System.in);//從鍵盤輸入字元串
boolean flag=true;//定義一個死循環,讓伺服器不停的接受從客戶端發送來的字元串
while(flag)
{
String s=br.readLine();//s是從客戶端接受到得字元串
System.out.println(s);
String s2=scanner.nextLine();//s2是寫給客戶端的字元串
ps.println(s2); //給客戶端發送你寫的東西
}
client.close();
} catch (IOException e) {//try 跟catch你不用管,這是用來處理異常的,就是固定格式
e.printStackTrace();
}
}
} 下面是客戶端import java.io.*;
import java.net.*;
import java.util.Scanner;public class Client
{ public static void main(String[] args)
{
try
{
Socket client=new Socket("192.168.--.--",8888);//IP地址是個字元串,埠號是個整數,這個埠號要跟前面你寫的那個一樣,還有IP地址,寫你的機器的IP地址
InputStream is=client.getInputStream();//這邊的兩個流跟上面伺服器的差不多的作用
BufferedReader bf=new BufferedReader(new InputStreamReader(is));
OutputStream os=client.getOutputStream();
PrintStream ps=new PrintStream(os);
Scanner scanner=new Scanner(System.in);
boolean flag=true;
while(flag)//這句話可以讓客戶端不停的說話
{
String s2=scanner.nextLine();
ps.println(s2);
String s=bf.readLine();
System.out.println(s); }
client.close();
}
catch (UnknownHostException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
} }}
8、在java網路編程中,客戶端/伺服器怎麼實現不同電腦之間的通信
1、首先兩台電腦和伺服器都在同一個網路中
2、相互之間可以用sokect<--->server 相互進行通信
9、如何用JAVA Socket實現兩台計算機通過一台伺服器進行通信呢?說一下具體思路。
通過WEB服務(webservice WCF等),各自取到對方的IP地址,形成點對點,然後就和普通的Socket一樣了