1、java中用socket實現客戶端與服務端雙向連接問題
//服務端程序://伺服器測試結果:
客戶端:192.168.0.200發來消息:001 byte
客戶端:192.168.0.200發來消息:byte
客戶端:192.168.0.200 已斷開連接!
客戶端:192.168.0.200發來消息:adasd
客戶端:192.168.0.200 已斷開連接!
//客戶端測試結果:
---001號客戶端--
001 byte
伺服器:192.168.0.200發來消息:001 byte
byte //001禮貌說跟伺服器說byte
---002號客戶端--
adasd //002客戶端直接關閉程序
伺服器:192.168.0.200發來消息:adasd
2、java的伺服器端socket的accept()方法返回值為什麼是客戶端的socket類型
其實復不管是伺服器制還是客戶端都是使用的socket,接通之後伺服器會產生針對這個客戶端的一個socket,當有多個客戶端連接上去了,他們互不幹擾,是同類型不同的對象。伺服器和客戶端主要的區別就在這,客戶端是一個Socket,伺服器卻可以有很多個。每次當有新的客戶端連接是,伺服器會生成一個新的socket來響應,但是我不清楚Java中的伺服器是否自帶多線程,如果不自帶的話,想要程序並發的同時處理響應多個客戶端的連接,注意在獲取到Socket之後交給線程處理。
3、java 如何在伺服器端用socket創建一個監聽埠,並對接受的數據進行處理,埠號為3333,請高手指點一下
我百度HI你好了
public class Test {
public static void main(String[] args) {
Test1 t=new Test1();
t.start(); //啟動線程
}
}
/**
* 繼承一個線程類
* @author Administrator
*
*/
class Test1 extends Thread{
private ServerSocket server = null;
public Test1(){
try {
server=new ServerSocket(3333);
} catch (IOException e) {
// TODO Auto-generated catch block
System.out.println("服務端初始化失敗!");
}
}
/**
* 繼承父類方法
*/
public void run(){
Socket clientSocket = null;
DataInputStream dis =null;
DataOutputStream dos=null;
String str="";
while(true){
try {
clientSocket=server.accept();
dis = new DataInputStream(clientSocket.getInputStream());//獲取輸入流,用於接收客戶端發送來的數據
dos = new DataOutputStream(clientSocket.getOutputStream());//獲取輸出流,用於客戶端向伺服器端發送數據
str=dis.readUTF(); //這里是客戶端發送來的數據
/*
* 這里邊你就可以做你想操作的事情了
*/
dos.writeUTF("這里是返回到客戶端的數據");//這里用來向客戶端返回數據
dis.close();
dos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
4、在java中如何用Socket 進行 伺服器端和客戶端交互的,具體一點。
打橫杠是因為那個方法已經過時了現在已經不怎麼用了。。。
Socket 伺服器: 1先創建 ServerSocket ss = new ServerSocket(埠號)
2 接收請求 Socket s = ss.accept()
3接收消息 先讀後寫BufferedReader in = new BufferedReader(
new InputStreamReader(s.getInputStream(),"utf-8"));
String str = in.readLine(); PrintWriter out = new PrintWriter
( new BufferedWriter( new OutputStreamWriter(s.getOutputStream())),true);
out.println("伺服器信息");
4關閉流out.close();
in.close();
is.close();
客戶端 1、通過IP地址和埠實例化Socket,請求連接伺服器
2、獲取Socket上的流以進行讀寫。
3、對流包裝進BufferedReader/PrintWriters實例
4、關閉打開的流
5、伺服器端是用java直接寫socket呢?還是用tomcat之類的呢?
不要重復造輪子,除非你寫的比tomcat更好。
6、Java中伺服器端ServerSocket對象怎麼獲取伺服器端地址和埠號??,怎麼獲取遠程請求的
ServerSocket s = new ServerSocket(8888);
while (true) {
// 建立連接
Socket socket = s.accept();
/ /getInetAddress()獲取遠程ip地址,getPort()遠程客戶端的斷後好
"你好,客戶端地址信息: " + socket.getInetAddress() + "\t客戶端通信埠號: " + socket.getPort()
7、編寫代碼,使用java ServerSocket創建伺服器端ServerSocket的過程。
伺服器端代碼:
import java.io.IOException;另附客戶端:
8、java的客戶端用的是Socket,伺服器端用SocketChannel,這兩種能實現通信么? 說得比較白,望理解
Socket 和ServerSocke 是一對 他們是java.net下面實現socket通信的類
SocketChannel 和ServerSocketChannel是一對 他們是java.nio下面實現通信的類 支持版非同步通信
伺服器必權須先建立ServerSocket或者ServerSocketChannel 來等待客戶端的連接
客戶端必須建立相對應的Socket或者SocketChannel來與伺服器建立連接
伺服器接受到客戶端的連接受,再生成一個Socket或者SocketChannel與此客戶端通信
不過Socket和SocketChannel可以通過 socket.channel() SocketChannel.socket() 方法相互轉換
同理ServerSocket 和ServerSocketChannel 也可以相互轉換
9、java socket伺服器實現
下面是一個簡單的通訊的例子,來傳輸伺服器和客戶端之間傳輸文件。 。如果它是一個簡單的文本傳輸內容到文字的話來簡化操作了。 。 。
1伺服器
包sterning;
進口java.io.BufferedInputStream中;
進口java.io.DataInputStream中; 進口java.io.DataOutputStream中;
進口的java.io.File;
進口java.io.FileInputStream中;
進口java.net.ServerSocket的;
進口的java。 net.Socket;
公共類ServerTest {
整數埠= 8821;
無效啟動(){
插座S = NULL;
嘗試{
ServerSocket的SS =新的ServerSocket(埠);
而(真){
/ /選擇要
字元串文件路徑=傳輸的文件「D:\ \ lib中的RAR」;
文件FI =新的文件(文件路徑);
System.out.println(「文件長度:」+(int)的fi.length());
/ /公共套接字accept()方法拋出
/ / IOException異常監聽並接受此套接字連接。這種方法已經在連接之前被封鎖。
S = ss.accept();
System.out.println(「建立socket連接」);
數據輸入流DIS =新的數據輸入流(新的緩沖輸入流(S.的getInputStream()));
dis.readByte();
數據輸入流FIS =新的數據輸入流(新的緩沖輸入流(新文件輸入流(文件路徑)));
數據輸出流PS =新的數據輸出流(s.getOutputStream());
/ /文件名,長度到客戶端。要真的在這里適用所有平台,如處理中國的名字,但還需要進行處理,具體想想在Java第四屆你可以看到,有現成的代碼。
ps.writeUTF(fi.getName());
ps.flush();
ps.writeLong((長)fi.length());
ps.flush();
整型的bufferSize = 8192;
的byte [] buf中=新的位元組[的bufferSize];
而(真){
整數讀= 0;
如果{
閱讀= fis.read(BUF)(FIS = NULL!);
如果(讀== -1){
突破;
ps.write(BUF,0,讀);
ps.flush();
/ /注意關閉套接字連接哦,否則客戶端將等待數據伺服器過,
/ /直到套接字超時,導致數據不完整。
fis.close();
S.CLOSE();
System.out.println(「文件傳輸完畢」);
}趕上(例外五){
e.printStackTrace();
公共靜態無效的主要(字串ARG []){
新ServerTest()開始();。的使用率輔助類
包sterning
}
}
2。底座;
程序import java.net *;。
進口java.io. *;
公共類ClientSocket的{
私有String IP;
私人INT埠;
私人Socket套接字= NULL;
數據輸出流出來= NULL;
數據輸入流getMessageStream = NULL;
公共ClientSocket的(字元串的ip,詮釋埠){
this.ip = IP;
this.port =口;
/ *** / / **
*創建一個socket連接
*
* @拋出異常
*例外 BR /> * /
公共無效創建連接()拋出異常{嘗試{
插座=新的Socket(IP,埠);
}趕上(例外五){
e.printStackTrace();!
如果(插座= NULL)
socket.close();
扔é;
} {終於
}
}
公共無效的sendMessage(字元串的sendMessage)拋出異常{
嘗試{
出=新的數據輸出流( socket.getOutputStream());
如果(sendMessage.equals(「視窗」)){
out.writeByte(0X1);
了out.flush();
返回;
}
如果(sendMessage.equals(「UNIX」)){
out.writeByte(0X2);
了out.flush();
返回;
}
如果(sendMessage.equals(的「Linux」)){
out.writeByte(0x3的);
了out.flush();
}其他{
out.writeUTF(的sendMessage);
了out.flush();
趕上(例外五){
e.printStackTrace();
如果(!出= NULL)
out.close();
扔é;
} {終於
}
}
公開數據輸入流getMessageStream()拋出異常{
{
getMessageStream =新的數據輸入流(新緩沖輸入的嘗試(socket.getInputStream()));
返回getMessageStream;
}趕上(例外五){
e.printStackTrace();!
如果(getMessageStream = NULL)
getMessageStream.close();
扔é;
} {終於
}
}
公共無效shutDownConnection(){
嘗試{
如果(!出= NULL) out.close();
getMessageStream.close()(getMessageStream =空!);
如果(插座= NULL!)
socket.close();。
}趕上(例外五){
3客戶端
包sterning ;
進口java.io.BufferedOutputStream;
進口java.io.DataInputStream中;
進口java.io.DataOutputStream中;
進口java.io.FileOutputStream中;
公共類ClientTest {
私人ClientSocket的CS = NULL;
私人字元串的ip =「本地主機」;/ /設置伺服器IP
私人INT埠= 8821;
私人字元串的sendMessage =「Windwos下」;
公共ClientTest(){
{
嘗試,如果(創建連接()){
的sendMessage();
的getMessage();
}趕上(例外){
ex.printStackTrace();
私人布爾創建連接(){
CS =新ClientSocket的(IP,埠); 嘗試{
cs.CreateConnection();
System.out.print(「連接伺服器成功!」+「\ n」);
返回true;
}趕上(例外五){
System.out.print(「!無法連接到伺服器」+「\ n」);
返回false;
私人無效的sendMessage(){
如果(CS == NULL)
回報;
嘗試{
cs.sendMessage(的sendMessage);
}趕上(例外五){
System.out.print(「!發送消息失敗」+「\ n」);
私人無效的getMessage(){
如果(CS == NULL)
回報;
數據輸入流的InputStream = NULL;
嘗試{
的InputStream = cs.getMessageStream();
}趕上(例外五){
System.out.print(「接收消息緩沖區錯誤\ n」);
返回;
{
/ /本地保存路徑}
試試,文件名會自動從伺服器繼承。
字元串SAVEPATH =「E:\ \」;
整型的bufferSize = 8192;
的byte [] buf中=新的位元組[的bufferSize];
整數passedlen = 0; 長LEN = 0;
SAVEPATH + = inputStream.readUTF();
數據輸出流fileOut =新的數據輸出流(新的緩沖輸出流(newBufferedOutputStream(新文件輸出流(SAVEPATH)))); LEN = inputStream.readLong();
System.out.println(「文件的長度是:」+ LEN +「\ n」);
系統。通過out.println(「開始接收文件!」+「\ n」);
而(真){
整數讀= 0;
如果(inputStream! = NULL){
閱讀= inputStream.read(BUF);
passedlen + =讀;
如果(讀== -1){
突破;
/ /進度條,如果它要播放的文件,你可以重復列印出一些相同的百分比
System.out.println的( 「收到的文件」+(passedlen * 100 / LEN)+「%\ N」);
fileOut.write(BUF,0,讀);
System.out的。的println(「接收完成,將文件保存為」+ SAVEPATH +「\ n」);
fileOut.close();
}抓(例外五){
System.out.println(「收到錯誤消息」+「\ n」);
返回;
公共靜態無效的主要(字串ARG []){
新ClientTest();
10、java編程實現客戶端和伺服器端使用socket進行通訊的程序
Java中有一個專門用來建立Socket伺服器的類,名叫ServerSocket,可以用伺服器那麼多個客戶端如何實現呢?
其實,簡單的分析一下,就可以看出客戶和服務通訊