導航:首頁 > 編程語言 > javasocket重新連接

javasocket重新連接

發布時間:2024-07-01 08:27:41

1. java Socket甯歌佸紓甯稿勭悊

銆銆鍦╦ava緗戠粶緙栫▼Socket閫氫俊涓 閫氬父浼氶亣鍒頒互涓嬪紓甯告儏鍐

銆銆絎 涓寮傚父鏄 BindException:Address already in use: JVM_Bind

銆銆璇ュ紓甯稿彂鐢熷湪鏈嶅姟鍣ㄧ榪涜宯ew ServerSocket(port)錛坧ort鏄涓涓 鐨勬暣鍨嬪礆級鎿嶄綔鏃 寮傚父鐨勫師鍥犳槸浠ヤ負涓巔ort涓鏍風殑涓涓絝鍙e凡緇忚鍚鍔 騫惰繘琛岀洃鍚 姝ゆ椂鐢╪etstat an鍛戒護 鍙浠ョ湅鍒頒竴涓狶istending鐘舵佺殑絝鍙 鍙闇瑕佹壘涓涓娌℃湁琚鍗犵敤鐨勭鍙e氨鑳借В鍐寵ラ棶棰樹簡

銆銆絎 涓寮傚父鏄 ConnectException: Connection refused: connect

銆銆璇ュ紓甯稿彂鐢熷湪瀹㈡埛絝榪涜 new Socket(ip port)鎿嶄綔鏃 璇ュ紓甯稿彂鐢熺殑鍘熷洜鏄鎴栬呭叿鏈塱p鍦板潃鐨勬満鍣ㄤ笉鑳芥壘鍒幫紙涔熷氨鏄璇翠粠褰撳墠鏈哄櫒涓嶅瓨鍦ㄥ埌鎸囧畾ip璺鐢憋級 鎴栬呮槸璇ip瀛樺湪 浣嗘壘涓嶅埌鎸囧畾鐨勭鍙h繘琛岀洃鍚 鍑虹幇璇ラ棶棰 棣栧厛媯鏌ュ㈡埛絝鐨剗p鍜宲ort鏄鍚﹀啓閿 濡傛灉姝g『鍒欎粠瀹㈡埛絝痯ing涓涓嬫湇鍔″櫒鐪嬫槸鍚﹁兘ping閫 濡傛灉鑳絧ing閫氾紙鏈嶅姟鍣ㄧ鎶妏ing紱佹帀鍒欓渶瑕佸彟澶栫殑鍔炴硶錛 鍒欑湅鍦ㄦ湇鍔″櫒絝鐨勭洃鍚鎸囧畾絝鍙g殑紼嬪簭鏄鍚﹀惎鍔 榪欎釜鑲瀹氳兘瑙e喅榪欎釜闂棰

銆銆絎 涓寮傚父鏄 SocketException: Socket is closed

銆銆璇ュ紓甯稿湪瀹㈡埛絝鍜屾湇鍔″櫒鍧囧彲鑳藉彂鐢 寮傚父鐨勫師鍥犳槸鏈絝涓誨姩鍏抽棴浜嗚繛鎺ュ悗錛堣皟鐢ㄤ簡Socket鐨刢lose鏂規硶錛夊啀瀵圭綉緇滆繛鎺ヨ繘琛岃誨啓鎿嶄綔

銆銆絎 涓寮傚父鏄 SocketException: 錛圕onnection reset鎴栬匔onnect reset by peer:Socket write error錛

銆銆璇ュ紓甯稿湪瀹㈡埛絝鍜屾湇鍔″櫒絝鍧囨湁鍙鑳藉彂鐢 寮曡搗璇ュ紓甯哥殑鍘熷洜鏈変袱涓 絎涓涓灝辨槸濡傛灉涓絝鐨凷ocket琚鍏抽棴錛堟垨涓誨姩鍏抽棴鎴栬呭洜涓哄紓甯擱鍑鴻屽紩璧風殑鍏抽棴錛 鍙︿竴絝浠嶅彂閫佹暟鎹 鍙戦佺殑絎涓涓鏁版嵁鍖呭紩鍙戣ュ紓甯(Connect reset by peer) 鍙︿竴涓鏄涓絝閫鍑 浣嗛鍑烘椂騫舵湭鍏抽棴璇ヨ繛鎺 鍙︿竴絝濡傛灉鍦ㄤ粠榪炴帴涓璇繪暟鎹鍒欐姏鍑鴻ュ紓甯革紙Connection reset錛 綆鍗曠殑璇村氨鏄鐢辮繛鎺ユ柇寮鍚庣殑璇誨拰鍐欐搷浣滃紩璧風殑

銆銆絎 涓寮傚父鏄 SocketException: Broken pipe

銆銆璇ュ紓甯稿湪瀹㈡埛絝鍜屾湇鍔″櫒鍧囨湁鍙鑳藉彂鐢 鍦ㄧ 涓寮傚父鐨勭涓縐嶆儏鍐典腑錛堜篃灝辨槸鎶涘嚭 SocketExcepton:Connect reset by peer:Socket write error鍚庯級 濡傛灉鍐嶇戶緇鍐欐暟鎹鍒欐姏鍑鴻ュ紓甯 鍓嶄袱涓寮傚父鐨勮В鍐蟲柟娉曟槸棣栧厛紜淇濈▼搴忛鍑哄墠鍏抽棴鎵鏈夌殑緗戠粶榪炴帴 鍏舵℃槸瑕佹嫻嬪規柟鐨勫叧闂榪炴帴鎿嶄綔 鍙戠幇瀵規柟鍏抽棴榪炴帴鍚庤嚜宸變篃瑕佸叧闂璇ヨ繛鎺

銆銆浜岋紟緙栧啓緗戠粶紼嬪簭鏃墮渶瑕佹敞鎰忕殑闂棰:

銆銆 鏄瑕佹g『鍖哄垎闀 鐭榪炴帴 鎵璋撶殑闀胯繛鎺ユ槸鎸囦竴緇忓緩絝嬪氨姘鎬箙淇濇寔 鐭榪炴帴鐨勬儏鍐墊槸 鍑嗗囨暟鎹鈥>寤虹珛榪炴帴鈥>鍙戦佹暟鎹鈥>鍏抽棴榪炴帴 寰堝氱殑紼嬪簭鍛樺啓浜嗗氬勾鐨勭綉緇滅▼搴 灞呯劧涓嶇煡閬撲粈涔堟槸闀胯繛鎺 浠涔堟槸鐭榪炴帴

銆銆 鏄瀵歸暱榪炴帴鐨勭淮鎶 鎵璋撶淮鎶ゅ寘鎷涓や釜鏂歸潰 棣栧厛鏄媯嫻嬪規柟鐨勪富鍔ㄦ柇榪烇紙鍗寵皟鐢 Socket鐨刢lose鏂規硶錛 鍏舵℃槸媯嫻嬪規柟鐨勫畷鏈 寮傚父閫鍑哄強緗戠粶涓嶉 榪欐槸涓涓鍋ュ.鐨勯氫俊紼嬪簭蹇呴』鍏峰囩殑 媯嫻嬪規柟鐨勪富鍔ㄦ柇榪炲緢綆鍗 涓昏佷竴鏂逛富鍔ㄦ柇榪 鍙︿竴鏂瑰傛灉鍦ㄨ繘琛岃繪搷浣 鍒欐ゆ椂鐨勮繑鍥炲煎彧 涓鏃︽嫻嬪埌瀵規柟鏂榪 鍒欏簲璇ヤ富鍔ㄥ叧闂鏈絝鐨勮繛鎺ワ紙璋冪敤Socket鐨刢lose鏂規硶錛 鑰屾嫻嬪規柟鐨勫畷鏈 寮傚父閫鍑哄強緗戠粶涓嶉 甯哥敤鏂規硶鏄鐢 蹇冭煩 涔熷氨鏄鍙屾柟鍛ㄦ湡鎬х殑鍙戦佹暟鎹緇欏規柟 鍚屾椂涔熶粠瀵規柟鎺ユ敹 蹇冭煩 濡傛灉榪炵畫鍑犱釜鍛ㄦ湡閮芥病鏈夋敹鍒板規柟蹇冭煩 鍒欏彲浠ュ垽鏂瀵規柟瀹曟満 寮傚父閫鍑烘垨鑰呯綉緇滀笉閫 姝ゆ椂涔熼渶瑕佷富鍔ㄥ叧闂鏈絝榪炴帴 濡傛灉鏄瀹㈡埛絝鍙鍦ㄥ歡榪熶竴瀹氭椂闂村悗閲嶆柊鍙戣搗榪炴帴 鉶界劧Socket鏈変竴涓猭eep alive閫夐」鏉ョ淮鎶よ繛鎺 濡傛灉鐢ㄨラ夐」 涓鑸闇瑕佷袱涓灝忔椂鎵嶈兘鍙戠幇瀵規柟鐨勫畷鏈 寮傚父閫鍑哄強緗戠粶涓嶉

lishixin/Article/program/Java/hx/201311/26630

2. java 網路編程 拋出Socket is closed異常 大蝦幫幫忙

額,你給的都是client端。

3. andoid的socket測試為什麼出現這個錯誤:java.net.ConnectException: failed to connect to /192.168.0.8

andoid的socket測試出現這個錯誤:java.net.ConnectException: failed to connect to /192.168.0.8的原因是因為當時測試人次要比平時多,從而導致伺服器出現不穩定;

解決方式:重新換一個伺服器;

andoid的socket測試使得伺服器的硬體組成較為復雜,對於伺服器硬體的維護應由專業人員進行。在維護和保養存儲設備時,我們首先應當對其容量進行測試,看是否需要進行擴容等操作。存儲容量一定要能滿足任務的需求,並留有一定的冗餘量。

(3)javasocket重新連接擴展閱讀:

andoid的socket測試拆卸和更新伺服器設備時,務必讓設備處於斷電狀態並進行接地處理。即便是更換最簡單的部件,這些環節也不能省略。對於一些不熟悉的部件,要反復仔細的閱讀說明書和參照文件,在沒有十足把握的前提下切忌盲目拆解。

對伺服器的密碼進行更換,密碼應有專人管理。選用的密碼要有一定的專業性,一定的復雜度,最好是將數字和字母等結合起來,大小寫也要融合進去。在日常的檢查中,我們要做好登統計,關閉一些不太使用的埠;

定期對伺服器進行除塵處理。特別是伺服器這種高溫高速運行的設備,大量的積塵對設備造成的傷害往往是致命的。除塵工作要科學有序的進行,不能想當然,也不能蠻干。在除塵過程中特別注意對電源系統的保護。

4. 用Java的socket編程實現c/s結構程序

今天太晚了,改天給你做一個,記得提醒我,這個如果只是要個簡單的,我半個小時就搞定了

給我個郵箱

現在給貼出我的代碼: 整個結構分兩個工程
1。服務端工程NioServer.java: 採用nio 方式的非同步socket通信,不僅可以實現你的伺服器還可以讓你多學習一下什麼是nio
2。客戶端工程UserClient.java: 採用Swing技術畫了一個簡單的UI界面,比較土,原因是我沒那麼多時間去設計界面,你需要的話可以自己去修改得漂亮點,相信不難

現在貼工程1:
package com.net;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.nio.ByteBuffer;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import java.util.Iterator;
import java.util.Set;

public class NioServer {
public static final int SERVERPORT=5555;
public static final String USERNAME="wangrong";
public static final String PASSword="123456";
public static final String ISACK="ACK";
public static final String ISNAK="NAK!";
// Selector selector;//選擇器
// SelectionKey key;//key。 一個key代表一個Selector 在NIO通道上的注冊,類似主鍵;
// //取得這個Key後就可以對Selector在通道上進行操作
private ByteBuffer echoBuffer = ByteBuffer.allocate( 1024 );// 通道數據緩沖區
public NioServer(){
}
public static void main(String[] args) throws IOException {
NioServer ns=new NioServer();
ns.BuildNioServer();
}
public void BuildNioServer() throws IOException{
/////////////////////////////////////////////////////////
///////先對服務端的ServerSocket進行注冊,注冊到Selector ////
/////////////////////////////////////////////////////////
ServerSocketChannel ssc = ServerSocketChannel.open();//新建NIO通道
ssc.configureBlocking( false );//使通道為非阻塞
ServerSocket ss = ssc.socket();//創建基於NIO通道的socket連接
//新建socket通道的埠
ss.bind(new InetSocketAddress("127.0.0.1",SERVERPORT));
Selector selector=Selector.open();//獲取一個選擇器
//將NIO通道選綁定到擇器,當然綁定後分配的主鍵為skey
SelectionKey skey = ssc.register( selector, SelectionKey.OP_ACCEPT );
////////////////////////////////////////////////////////////////////
//// 接收客戶端的連接Socket,並將此Socket也接連注冊到Selector ////
///////////////////////////////////////////////////////////////////
while(true){
int num = selector.select();//獲取通道內是否有選擇器的關心事件
if(num<1){continue; }
Set selectedKeys = selector.selectedKeys();//獲取通道內關心事件的集合
Iterator it = selectedKeys.iterator();
while (it.hasNext()) {//遍歷每個事件
try{
SelectionKey key = (SelectionKey)it.next();
//有一個新聯接接入事件,服務端事件
if ((key.readyOps() & SelectionKey.OP_ACCEPT)
== SelectionKey.OP_ACCEPT) {
// 接收這個新連接
ServerSocketChannel serverChanel = (ServerSocketChannel)key.channel();
//從serverSocketChannel中創建出與客戶端的連接socketChannel
SocketChannel sc = serverChanel.accept();
sc.configureBlocking( false );
// Add the new connection to the selector
// 把新連接注冊到選擇器
SelectionKey newKey = sc.register( selector,
SelectionKey.OP_READ );
it.remove();
System.out.println( "Got connection from "+sc );
}else
//讀客戶端數據的事件,此時有客戶端發數據過來,客戶端事件
if((key.readyOps() & SelectionKey.OP_READ)
== SelectionKey.OP_READ){
// 讀取數據
SocketChannel sc = (SocketChannel)key.channel();
int bytesEchoed = 0;
while((bytesEchoed = sc.read(echoBuffer))> 0){
System.out.println("bytesEchoed:"+bytesEchoed);
}
echoBuffer.flip();
System.out.println("limet:"+echoBuffer.limit());
byte [] content = new byte[echoBuffer.limit()];
echoBuffer.get(content);
String result=new String(content);
doPost(result,sc);
echoBuffer.clear();
it.remove();
}
}catch(Exception e){}
}
}
}

public void doPost(String str,SocketChannel sc){
boolean isok=false;
int index=str.indexOf('|');
if(index>0){
String name=str.substring(0,index);
String pswd=str.substring(index+1);
if(pswd==null){pswd="";}
if(name!=null){
if(name.equals(USERNAME)
&& pswd.equals(PASSWORD)
){
isok=true;
}else{
isok=false;
}
}else{
isok=false;
}
}else{
isok=false;
}
String result="";
if(isok){
result="ACK";
}else{
result="NAK!";
}
ByteBuffer bb = ByteBuffer.allocate( result.length() );
bb.put(result.getBytes());
bb.flip();
try {
sc.write(bb);
} catch (IOException e) {
e.printStackTrace();
}
bb.clear();
}

}

下面貼工程2
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
public class UserClient implements ActionListener{
JFrame jf;
JPanel jp;
JLabel label_name;
JLabel label_pswd;
JTextField userName;
JButton jb;
JPasswordField paswrd;
JLabel hintStr;
public UserClient (){
jf=new JFrame("XXX 登陸系統");
jp=new JPanel();
jf.setContentPane(jp);
jf.setPreferredSize(new Dimension(350,220));
jp.setPreferredSize(new Dimension(350,220));
jp.setBackground(Color.gray);
label_name=new JLabel();
label_name.setPreferredSize(new Dimension(150,30));
label_name.setText("請輸入帳戶(數字或英文):");
userName=new JTextField();
userName.setPreferredSize(new Dimension(150,30));
jp.add(label_name);
jp.add(userName);
label_pswd=new JLabel();
label_pswd.setPreferredSize(new Dimension(150,30));
label_pswd.setText("請輸入密碼:");
jp.add(label_pswd);
paswrd=new JPasswordField();
paswrd.setPreferredSize(new Dimension(150,30));
jp.add(paswrd);
jb=new JButton("OK");
jb.setPreferredSize(new Dimension(150,30));
jb.setText("確 定");
jb.addActionListener( this);
jp.add(jb);
hintStr=new JLabel();
hintStr.setPreferredSize(new Dimension(210,40));
hintStr.setText("");
hintStr.setForeground(Color.RED);
jp.add(hintStr);
jf.pack();
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

private String name;
private String pswd;
public void actionPerformed(ActionEvent e) {
name=userName.getText().trim();
pswd=new String(paswrd.getPassword());
if(pswd==null){
pswd="";
}else{
pswd=pswd.trim();
}
if(name!=null && name.length()>0){
hintStr.setText("正在驗證客戶端,請稍候...");
start();
}
}

OutputStream os;
Socket s;
InputStream is;
public void start(){
//建立聯網線程
new Thread(new Runnable(){
public void run() {
try {
s=new Socket("127.0.0.1",5555);
//寫
os=s.getOutputStream();
os.write(name.getBytes());
os.write('|');//用戶名與密碼用"|"分隔
os.write(pswd.getBytes());
os.flush();
//讀內容
Thread.sleep(1000);
is=s.getInputStream();
int len=is.available();
System.out.println("len:"+len);
byte[] bytes=new byte[len];
is.read(bytes);
String resut=new String(bytes);
System.out.println("resut:"+resut);
//TODO 這里通過返回結果處理
if(resut.equals("ACK")){
hintStr.setText("驗證成功,歡迎光臨!");
}else{
paswrd.setText(null);
hintStr.setText("用戶名或密碼錯誤,請重新輸入");
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}finally{
// try {
// os.close();
// is.close();
// s.close();
// } catch (IOException e) {
// e.printStackTrace();
// }
}
}
}).start();
}

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

}

5. java 下載文件 Connection reset by peer: socket write error

這個是應為用戶創建的是長連接,之後突然關閉了本地的handler,導致流讀取錯專誤,所以就報屬錯了。
備註:這個如果是用來轉發的,之後發現本地停止後報出來的,是不影響正常使用的,之後重新運行代碼,會再次進行連接的。建議這個本地的socket不要隨意的斷開連接,否則如果有流沒讀完,可能會導致後續程序出問題的。

6. socket 線程 思路 java

網上參考別人的例子 改自己的程序 終於搞明白了 原來在socket的伺服器端設置線程並不是像之前想的那樣 建立一個連接後就重新開一個埠去監聽 這樣的想法遇到了很多問題 首先 當我把客戶端 弄成for循指談談環遞增的鏈接個格埠的時候 發現總是異常 因為伺服器端的新的埠建立速度總是沒有客戶端的主動連接塊 然後試圖去讓客戶端創建新埠鏈接的速度降慢 但是一直沒調試成功 並且即便是成功了 這個問侍純題還是有隱患的 因為客戶端的鏈接速度是不可控的 有兩天 這個問題沒有進展 後來在網上查到了 原來伺服器端的線程 並不是用來創建新的埠的 之前也想過 一個伺服器端不可能就連接一個客戶端 但是沒想出來解決辦法 看了例子的提示後 才做出來 伺服器端的線程是用來監聽連接客戶端的 即 當監聽到客戶端的連接請求時就會主動去創建一個socket線程去連接 完成客戶端和伺服器端的交互 後客戶端自動斷開鏈接

核心代碼

Main 函數

ServerSocket serverSocket=null

boolean listening=true

try{

serverSocket=new ServerSocket( )

//創建一個ServerSocket在埠 監聽客戶請求

}catch(IOException e) {}

while(listening){ //永遠循環監聽

newServerThread(serverSocket accept() clientnum) start()

//監聽到客戶請求 根據得到的Socket對象和

客戶計數創建服務線程 並啟動之

clientnum++ //增加客戶計數

}

serverSocket close() //關閉ServerSocket

設唯碰計ServerThread類

public class ServerThread extends Thread{

Socket socket=null //保存與本線程相關的Socket對象

int clientnum //保存本進程的客戶計數

public ServerThread(Socket socket int num) { //構造函數

this socket=socket //初始化socket變數

clientnum=num+ //初始化clientnum變數

}

public void run() { //線程主體

try{//在這里實現數據的接受和發送

lishixin/Article/program/Java/hx/201311/26230

7. java socket多文件傳輸問題

參考思路:
1.先傳文件名跟文件大小到 server。
2.開始傳文件。
3.告訴server傳完了。
4.客戶端開始傳下一個,重復123。
參考簡單代碼:
long fileLength;
int readLength;
long totalLength;
for (...)
{

// 讀取文件名
// 讀取文件長度保存到fileLength中
// 將totalLength置為0
while (1)
{
// 讀取數據流,將實際讀取的位元組數保存在readLength中
totalLength += readLength;

if (totalLength >= fileLength) // 一個文件讀取完成,break
// 這樣就差不多了,不過這會把下一個文件的信息讀到當前文件中來。
// 思路是fileLength - totalLength小於等於你設置的緩沖區長度時讀取長度就是fileLength - totalLength
}

}

8. java socket如果服務端掉線 客戶端應該怎樣重連,實現的思路是怎麼樣的,最好能有具體的代碼參考一下

看代碼,不明白的追問

// 無窮循環,用於自動重新連接網關
while (true) {
// 捕獲sleep異常
try {
// 捕獲socket異常
try {
// 創建socket連接
socketGateway = new Socket("127.0.0.1", 8888);

// 創建輸入輸出對象
inStream = new DataInputStream(socketGateway.getInputStream());
outStream = new DataOutputStream(socketGateway.getOutputStream());

byte buf[] = new byte[1]; // 數據緩沖區
int intLen; // 讀緩沖區返回的長度

// 無窮循環,用於讀緩沖區數據
while (true) {
// 捕獲讀緩沖區異常
try {
intLen = inStream.read(buf, 0, 1);

// 可讀長度-1則斷開連接
if (intLen == -1) {
break;
}

// 處理buf
}

// 連接斷開
catch (EOFException e) {
break;
}

// 接收數據超時
catch (SocketTimeoutException e) {
break;
}

// 超過數據包末尾
catch (IOException e) {
break;
}
}
} catch (Exception e) {
// 處理socket錯誤
}

// 休眠1秒後重連
sleep(1000);
} catch (Exception e) {
// 處理sleep錯誤
}
}

閱讀全文

與javasocket重新連接相關的資料

熱點內容
書香門第安卓 瀏覽:395
如何分離編程數值 瀏覽:996
描述文件是幹嘛的 瀏覽:868
文件格式化恢復 瀏覽:353
v顯卡驅動程序源碼 瀏覽:44
iphone5s聲音小怎麼解決 瀏覽:656
文件名文字看不清了 瀏覽:313
電腦找不到cftmon文件 瀏覽:768
qq分組久伴酒伴久伴 瀏覽:697
文檔轉成pdf格式文件 瀏覽:621
離子數據怎麼寫 瀏覽:876
jspapijar官網下載 瀏覽:366
html調用文本文件 瀏覽:921
想學數控編程哪裡好 瀏覽:860
js獲取系統動態時間間隔 瀏覽:165
win10改win7進pe卡住 瀏覽:456
u盤中毒ink文件 瀏覽:718
蘋果換機數據遷移包含哪些數據 瀏覽:234
程式控制可編程直流電源在哪裡 瀏覽:598
容積長寬高的數據從什麼面測量 瀏覽:978

友情鏈接