1. 程式人生 > >java socket連線以及傳送和接收資料

java socket連線以及傳送和接收資料

/**
 * 
 */
package socketTest2;


import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    public static final int PORT = 12345;//監聽的埠號   
    
    public static void main(String[] args) {  
        System.out.println("伺服器啟動...\n");  
        Server server = new Server();  
        server.init();  
    }  
  
    public void init() {  
        try {  
            ServerSocket serverSocket = new ServerSocket(PORT);  
            while (true) {  
                // 一旦有堵塞, 則表示伺服器與客戶端獲得了連線  
                Socket client = serverSocket.accept();  
                // 處理這次連線  
                new HandlerThread(client);  
            }  
        } catch (Exception e) {  
            System.out.println("伺服器異常: " + e.getMessage());  
        }  
    }  
  
    private class HandlerThread implements Runnable {  
        private Socket socket;  
        public HandlerThread(Socket client) {  
            socket = client;  
            new Thread(this).start();  
        }  
  
        public void run() {  
            try {  
                // 讀取客戶端資料  
                DataInputStream input = new DataInputStream(socket.getInputStream());
                String clientInputStr = input.readUTF();//這裡要注意和客戶端輸出流的寫方法對應,否則會拋 EOFException
                // 處理客戶端資料  
                System.out.println("客戶端發過來的內容:" + clientInputStr);  
  
                // 向客戶端回覆資訊  
                DataOutputStream out = new DataOutputStream(socket.getOutputStream());  
                System.out.print("請輸入:\t");  
                // 傳送鍵盤輸入的一行  
                String s = new BufferedReader(new InputStreamReader(System.in)).readLine();  
                out.writeUTF(s);  
                
                out.close();  
                input.close();  
            } catch (Exception e) {  
                System.out.println("伺服器 run 異常: " + e.getMessage());  
            } finally {  
                if (socket != null) {  
                    try {  
                        socket.close();  
                    } catch (Exception e) {  
                        socket = null;  
                        System.out.println("服務端 finally 異常:" + e.getMessage());  
                    }  
                }  
            } 
        }  
    }  
}  
/**
 * 
 */
package socketTest2;


import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;

public class Client {
    public static final String IP_ADDR = "localhost";//伺服器地址 
    public static final int PORT = 12345;//伺服器埠號  
    
    public static void main(String[] args) {  
        System.out.println("客戶端啟動...");  
        System.out.println("當接收到伺服器端字元為 \"OK\" 的時候, 客戶端將終止\n"); 
        while (true) {  
            Socket socket = null;
            try {
                //建立一個流套接字並將其連線到指定主機上的指定埠號
                socket = new Socket(IP_ADDR, PORT);  
                  
                //讀取伺服器端資料  
                DataInputStream input = new DataInputStream(socket.getInputStream());  
                //向伺服器端傳送資料  
                DataOutputStream out = new DataOutputStream(socket.getOutputStream());  
                System.out.print("請輸入: \t");  
                String str = new BufferedReader(new InputStreamReader(System.in)).readLine();  
                out.writeUTF(str);  
                  
                String ret = input.readUTF();   
                System.out.println("伺服器端返回過來的是: " + ret);  
                // 如接收到 "OK" 則斷開連線  
                if ("OK".equals(ret)) {  
                    System.out.println("客戶端將關閉連線");  
                    Thread.sleep(500);  
                    break;  
                }  
                
                out.close();
                input.close();
            } catch (Exception e) {
                System.out.println("客戶端異常:" + e.getMessage()); 
            } finally {
                if (socket != null) {
                    try {
                        socket.close();
                        System.out.println("socket is closed");
                    } catch (IOException e) {
                        socket = null; 
                        System.out.println("客戶端 finally 異常:" + e.getMessage()); 
                    }
                }
            }
        }  
    }  
}  

相關推薦

java socket連線以及傳送接收資料

/** * */ package socketTest2; import java.io.BufferedReader; import java.io.DataInputStream; import java.io.DataOutputStream; import

Java TCP/IP Socket程式設計】----傳送接收資料----構建解析協議訊息

--------筆記來自於書籍《Java TCP/IP Socket程式設計》。 簡介 使用套接字時,通常要麼是需要同時建立通訊通道兩端的程式,要麼實現一個給定的協議進行通訊。如果知道通訊雙方都使用java實現,且擁有對協議的完全控制權,那麼就可以使用Java的內建工具如Serialiabl

Java TCP/IP Socket程式設計】----傳送接收資料----訊息成幀與解析

目錄   簡介 成幀與解析 成幀技術案例 簡介 在程式中使用套接字向其他程式提供資訊或者使用其他程式提供的資訊,這就需要任何需要交換資訊的程式間在資訊編碼方式上達成共識(包含了資訊交換的形式和意義),稱為協議,用來實現特定的應用程式的協議叫應用程式協議。大部分應

android連線SSM傳送接收資料

//註冊賬戶 URL url=null; HttpURLConnection httpURLConnection=null; String result=null,re="";

26 API-網路程式設計(網路概述,Socket通訊機制,UDP協議傳送接收資料,TCP協議傳送接收資料)

1:網路程式設計(理解) (1)網路程式設計:用Java語言實現計算機間資料的資訊傳遞和資源共享(2)網路程式設計模型 l網路模型一般是指 OSI(Open System Interconnection開放系統互連)參考模型 TCP/IP參考模型 (3)網路程式

Java實現RS485串列埠通訊,傳送接收資料進行解析

  最近專案有一個空氣檢測儀,需要得到空氣檢測儀的實時資料,儲存到資料庫當中。根據瞭解得到,硬體是通過rs485進行串列埠通訊的,需要傳送16進制命令給儀器,然後通過輪詢來得到資料。   需要先要下載RXTX的jar包,win64位下載地址:http://pan.baidu.com/s/1o6zLmTc);

非同步SOCKET程式設計-傳送接收資料

我本想把傳送和接收分開作為兩部分,但是最後我決定只略微解釋一下 FD_READ ,留下更多的時間來說明更復雜的 FD_WRITE , FD_READ 事件非常容易掌握. 當有資料傳送過來時, WinSock 會以 FD_READ 事件通知你, 對於每一個 FD_READ 事件

非同步SOCKET程式設計-傳送接收資料[轉] 非同步SOCKET程式設計-傳送接收資料[轉]

Socket(套接字)◆先看定義: typedef unsigned int u_int; typedef u_int SOCKET; ◆Socket相當於進行網路通訊兩端的插座,只要對方的Socket和自己的Socket有通訊聯接,雙方就可以傳送和接收資料了。其定義類似於檔案控制代碼的定義。◆Socket有

C#中COM串列埠連線傳送接收資料

該文中使用的串列埠接收資料方法不會造成cpu佔用過高等問題 原始碼地址:https://download.csdn.net/download/horseroll/10756130 demo效果圖: 1.首先宣告一個Serial變數 SerialPort serialPort1

UDP網路程式傳送接收資料

建立一個基於udp的網路程式流程很簡單,具體步驟如下: 1.建立客戶端套接字 2.傳送/接收資料 3.關閉套接字 UDP傳送和接收資料 在 Python 中 使用socket 模組的函式 socket 就可以完成: import socket #

linux多執行緒下開啟串列埠傳送接收資料

1 啟動執行緒1讀串列埠 2 等待3秒後 3 啟動執行緒2寫串列埠,傳送字串後關閉 4 等待10秒 5 關閉兩個執行緒 #include <pthread.h> #include <stdio.h> #include <sys/time.h> #include &

java實現kafka訊息傳送接收

之前寫了一篇關於kafka叢集搭建的點選開啟連結。想了解的可以看下。今天這個實現是和前面叢集對應的。使用的是新版的API。屬性如果想定製自己的,需要到官方網址上面去檢視一下對應的值。推介大家多去看看官方的介紹和demo。網上有些翻譯過來的例子並不完善,最好是知己知彼,才能百戰

通過UDP傳送接收資料

傳送端: package net.udp; import java.io.IOException; import java.net.DatagramPacket; import java.net.Da

網絡卡如何傳送接收資料

 IP報文可以看作一個包。     Linux網絡卡驅動程式,將IP包新增14位元組的MAC包頭,構成MAC包。     MAC包中含有傳送端和接收端的MAC地址資訊。既然是驅動程式建立的MAC包頭資訊,當然可以隨便輸入地址資訊的,主機偽裝就是這麼實現的。    

WebSocket:建立例項、傳送接收資料

1、Web Sockets:能夠在客戶端和服務端之間傳送非常少量的資料,而不必擔心HTTP那樣位元組級的開銷 由於傳遞的資料包很小,因此WebSockets非常適合移動應用。 缺點:制定協議的時間比制定

虛擬機器主機linux(unbuntu)開發板使用串列埠連線以及傳送接收檔案

一、串列埠使用背景 基本上檔案都是用tftp、nfs協議上傳和接收,不過這個需要使用到網路,相當於佔用網線口,不過相對而言,檔案上傳速度較快,對於檔案小的檔案(<1M大小),建議使用minicom工具;對於大檔案,推薦使用tftp或者nfs工具。 二、minicom工具 1、linux

MQTT Java客戶端Eclipse paho實現資料傳送接收

MQTT(MQ Telemetry Transport)是IBM開發的一種網路應用層的協議 使用場景: 1、不可靠、網路頻寬小的網路 2、執行的裝置CPU、記憶體非常有限 特點: 1、基於釋出/訂閱模型的協議 2、他是二進位制協議,二進位制的特點就是緊湊、佔用

Socket實現通訊,實時接收資料以及傳送資料

公司要做一個視訊採集socket通訊的專案,第三方服務端已經提供好了服務,讓我們對接,但是目前ui還沒有,所以就暫時先自己寫個小demo測試一下資料連線。 * 先看下佈局吧,很直觀。<?xml version="1.0" encoding="utf-8"?><

Java 小例子:通過 Socket 傳送接收檔案

這是一個簡單的包含傳送端和接收端的例子。傳送端向接收端傳送檔名和檔案內容,接收端將收到的檔案儲存在磁碟上。接收端可以同時接收多個傳送端傳來的檔案,但沒有處理檔案同名的情況。 這個例子中設計了一個簡單的協議。傳送的內容是這樣的: 檔名長度(4位元組)—檔名—檔案內容長度(4位

Java socket模擬傳送接收HTTP訊息

理解:模擬登陸指定網站,登陸成功後,獲取返回串中的cookie值用於發起下次請求。 package demo.http.client; import java.io.IOException; import java.io.InputStream; import java.