導航:首頁 > IDC知識 > java伺服器tcp連接

java伺服器tcp連接

發布時間:2021-01-14 13:15:11

1、java中TCP伺服器連接資料庫查詢的問題

查詢獲得的結果是不是很大,本地返回很快,如果通過網路結果集很大的話就很慢,畢竟要握手之類的。

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網路高手,tcp最大連接問題

網路上來盛傳的那個改連接數,我認自為基本上沒用,關鍵是你要了解他的原理,
它的作用是改變單位時間內的並發連接數,也就是說你寫個程序,想要在1秒內連接超過50(假設)此連接,是不被允許的,你只能達到10個,我認為一般應用足夠了,比如下載應用,1秒不夠,稍後軟體都會重試,並不會影響你的下載速度,像windows 2003這樣的操作系統,是不會做此限制的,作為伺服器,它的目標就是提高網路吞吐量。
這樣解釋能明白否?

4、java網路編程中,對於客戶端和伺服器的tcp連接,如果客戶端異常斷開連接,伺服器端如何獲知,有什麼方法?

這個得用java心跳處理機制。就是客戶端每隔一段時間向伺服器發送指定信息,如果伺服器沒有收到客服端發來的信息,這時伺服器和客服端連接就已經斷開。具體的心跳實現百度上很多。

5、java中,用哪一個類來表示tcp協議的伺服器socket對象

服務端監復聽:ServerSocket server=new ServerSocket(port);//port:綁定的端制口號
Socket client=server.accept();//監聽埠,一旦取得連接則獲得客戶端的socket連接對象client

客戶端: Socket s=new Socket(ip,port);//要連接的伺服器的ip以及埠號

如果正常連接上之後,socket的對象可以獲得InputStream和OutputStreame,然後就可以進行通信了

完成通信之後,執行socket對象的close()方法關閉連接,完成一次完整的socket連接

6、有個Java 項目,通過Socket Tcp長連接通信方式向伺服器發送消息。

你這消息頭、消息體的結構格式都定下來了,總長度就是固定的啊?消息體的長專度不是一共2+2+4+1=9個位元組么屬?消息格式肯定要按照服務端的要求進行發送,明顯服務端不是java的程序。。但是java里是沒有Unsigned Integer這種數據類型的(java的stream操作里提供了一些unsigned的方法,或者自己寫方法來生成對應的位元組格式),你可以按照他的要求,使用位元組數組封裝好,然後發送。
針對這個示例消息,你可以:
創建一個長度為9的位元組數組。把「9」變成byte放入前兩個位元組(前兩個位元組數據應該為:0x00, 0x09。這是第一個欄位,長度),後面的欄位數據以此類推。一個欄位一個欄位處理成伺服器要求的格式。
然後把位元組流發送給服務端。

7、請問JAVA中創建一個TCP伺服器端程序的驟是什麼呢?

1.建立一個伺服器socket並開始監聽.

2.使用accept()方法取得新的連接.

3.建立輸入和輸出流.

4.在已專有的協議上產生會屬話.

5.關閉客戶端流和socket.

6.回到第二步或者到第七步.

7.關閉伺服器socket.

8、想用JAVA做一個伺服器,請問怎麼利用TCP和線程,實現多個客戶端同時在線,能與伺服器進行交互?

伺服器監聽埠 做個無限循環 接到一個連接就創建一個通道線程,並將通道線程存儲到一個list集合中

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/*
 * 4.用socket通訊寫出多個客戶端和一個伺服器端的通訊,
 * 要求客戶發送數據後能夠回顯相同的數據(回顯功能)(實用TCP方式)。
 */
public class Test4Server {



// 主入口
public static void main(String[] args) throws IOException {
scoketServer();
}

// 開啟的tcp8888監聽埠
public static void scoketServer() throws IOException {
ServerSocket server = new ServerSocket(8888);
while (true) {
// 未連通前線程阻塞,連通後開啟一個socket通道線程後繼續監聽8888埠
Socket socket = server.accept();
System.out.println(socket.getInetAddress().getHostAddress()
+ "連接進入");
new SocketThread(socket).start();
}
}



}

// 一個伺服器埠中監聽多個客服端通道線程
class SocketThread extends Thread {
//  所有通道寫入流的集合
private static List<PrintWriter> list =new ArrayList<PrintWriter>();

private BufferedReader bufferedReader;
private PrintWriter printWriter;

public SocketThread(Socket socket) throws IOException {
this.bufferedReader = new BufferedReader(new InputStreamReader(socket
.getInputStream()));
this.printWriter = new PrintWriter(socket.getOutputStream());
list.add(printWriter);
}

@Override
public void run() {
String string = null;
while (true) {
try {
// 伺服器在通道中讀到的信息回顯給客服端
string = bufferedReader.readLine();
System.out.println("客服端信息:" + string);
for(PrintWriter printWriter:list ){
printWriter.write("伺服器回顯:" + string + " ");
printWriter.flush();
}
} catch (IOException e) {

}
}

}
}

客服端代碼 可以用在區域網中用多台來連接測試

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;

public class Test4Client {
public static Object obj = new Object();

// 客服端的主入口
public static void main(String[] args) throws IOException {
socketClient();
}

// 與伺服器連通地址本機(127.0.0.1),區域網中其他機器是(伺服器在區域網中的ip地址) 埠都是8888
public static void socketClient() throws IOException {
Socket socket = new Socket("127.0.0.1", 8888);
if (socket.isConnected()) {
// 如果連接成功了就開啟寫和讀的進程
new writer(socket).start();
new read(socket).start();
} else {
System.out.println("伺服器未開啟");
}
}
}

// 寫入到通道的線程
class writer extends Thread {
@SuppressWarnings("unused")
private Socket socket;
private PrintWriter printWriter;
private Scanner scanner = new Scanner(System.in);
private String str = null;

public writer(Socket socket) throws IOException {
this.socket = socket;
this.printWriter = new PrintWriter(socket.getOutputStream());

}

@Override
public void run() {
scanner.useDelimiter(" ");

while (true) {
System.out.print("請輸入信息:");
// 產生掃描器的線程阻塞
str = scanner.next();
System.out.println("我說:"+str);
printWriter.write(str + " ");
printWriter.flush();
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}

// 從通道中讀取的線程
class read extends Thread {
private Socket socket;
private BufferedReader bufferedReader;
private String str = null;

public read(Socket socket) throws IOException {
this.socket = socket;
this.bufferedReader = new BufferedReader(new InputStreamReader(socket
.getInputStream()));
}

@Override
public void run() {
while (true) {

try {
str = bufferedReader.readLine();
System.out.println(str);
} catch (IOException e) {
}
try {
Thread.sleep(200);
} catch (InterruptedException e) {

e.printStackTrace();
}
}
}
}

9、Java TCP如何實現一個伺服器向多個客戶機發送信息?

你伺服器accept方法後是不是會得到一個Socket

為這個Socket(是通過這個Socket和客戶端的Socket進行溝通)分配一個服務

我是這么用的ServerThread tt=new ServerThread(socket);

class ServerThread
{
private Socket so;
public ServerThread(Socket s)
{
this.so=s;

}

public void send()
{

}

public void receive()
{
Thread re=new Thread()

{
public void run()

{

}
}
}
}

相當於你用手機撥打人工服務,會給你分配一個客服

為這個Socket分配後,寫一個發送方法,和一個接收方法(線程)

然後把ServerThread tt=new ServerThread(socket);中的tt保存到集合中去,要單獨給某個發送

就從集合中取出來.send();這個方法應該帶個參數,把消息對象傳過去就是

10、java 的 tcp 建立客戶端和伺服器的連接問題

0.0.0.0表示監聽所有IP,在有公網IP的情況下,雲伺服器上一般這么填寫

與java伺服器tcp連接相關的知識