A. 使用java語言實現tcp和udp文件傳輸,不使用socket類。
你這種說法本身就有待商榷。Java是一種商用開發語言,封裝了很多上層的類完成企專業開發需要屬。目的就是在企業開發中可以快速精準的完成企業開發要求。例如,ServerSocket/Socket幫助你完成tcp協議,DatagramPacket幫助你完成UDP協議。你卻需要自己實現協議。而Java語言本身對於這些底層操作系統相關的調用都比較麻煩。所以,如果你真要了解通信本身的底層協議,建議你用C語言來完成,而不是Java。
建議你的老師也好好了解一下各種語言的使用范圍。在國外Java是不建議在大學的計算機課程中講的,因為這會讓你很難了解操作系統及其整個計算機系統,只能快速完成某些具體開發任務。建議對於計算機科學和計算機體系機構方面的科研教學,使用比較底層的語言,例如C語言。
B. JAVA TCP通信,客戶端給伺服器傳送JAVA對象通信出錯了,求各位大神指教
在java中用socket傳輸對象的時候,底層是把java對象序列化,然後以二進制數據進行傳輸的。socket的服務端和客戶端都需要有這個對象的聲明,比如客戶端發送的是com.client.MsgPackage對象,那麼這個對象的class文件必須在服務端的classpath中。否則就會是接收方接收了tcp的數據包,但是無法還原成對象。
底層要能把對象序列化,這個對象要實現一個可序列化的介面:java.io.Serializable。
類通過實現 java.io.Serializable
介面以啟用其序列化功能。未實現此介面的類將無法使其任何狀態序列化或反序列化。可序列化類的所有子類型本身都是可序列化的。序列化介面沒有方法或欄位,僅用於標識可序列化的語義。
writeObject 方法負責寫入特定類的對象的狀態,以便相應的 readObject 方法可以恢復它。通過調用
out.defaultWriteObject 可以調用保存 Object 的欄位的默認機制。該方法本身不需要涉及屬於其超類或子類的狀態。通過使用
writeObject 方法或使用 DataOutput 支持的用於基本數據類型的方法將各個欄位寫入 ObjectOutputStream,狀態可以被保存。
readObject 方法負責從流中讀取並恢復類欄位。它可以調用 in.defaultReadObject
來調用默認機制,以恢復對象的非靜態和非瞬態欄位。defaultReadObject
方法使用流中的信息來分配流中通過當前對象中相應指定欄位保存的對象的欄位。這用於處理類演化後需要添加新欄位的情形。該方法本身不需要涉及屬於其超類或子類的狀態。通過使用
writeObject 方法或使用 DataOutput 支持的用於基本數據類型的方法將各個欄位寫入 ObjectOutputStream,狀態可以被保存。
C. java中怎麼用TCP發送數據
println和 print的區別 還是參照javadoc比較准確,就是最後是否跟上一個換行。這種函數含義的解釋,查手冊是最准確的。
s.getOutputStream() 返回的結果 直接就是 OutputStream 這個類本身就是用於發送 byte[]的。
字元串轉化成 byte[] 直接調用getBytes。
LZ應該詳細閱讀java手冊。對於已經接觸到的類 比如String,這種基本的,要看看它所有的函數實現。這就和學英語背單詞一樣,必須要有量的上去才行。
D. java中怎麼用tcp/ip將伺服器的消息發送給多個用戶
你伺服器accept方法後是不是會得到一個
為這個Socket(是通過這個Socket和客戶端的Socket進行溝通)分配一個服務
我是這么用的ServerThread tt=new ServerThread(socket);
classServerThread
{
privateSocketso;
publicServerThread(Sockets)
{
this.so=s;
}
publicvoidsend()
{
}
publicvoidreceive()
{
Threadre=newThread()
{
publicvoidrun()
{
}
}
}
}
相當於你用手機撥打人工服務,會給你分配一個客服
為這個Socket分配後,寫一個發送方法,和一個接收方法(線程)
然後把ServerThread tt=new ServerThread(socket);中的tt保存到集合中去,要單獨給某個發送
就從集合中取出來.send();這個方法應該帶個參數,把消息對象傳過去就是
E. 在Java中實現TCP協議編程中怎麼傳
在Java中實現TCP協議編程
ServerSocket:編寫TCP網路服務程序,首先要用到java.net.ServerSocket類用以創建伺服器Socket
構造方法:
ServerSocket(intport):創建綁定到特定埠的伺服器套接字
ServerSocket(intport,intbacklog):利用指定的backlog(伺服器忙時保持連接請求的等待客戶數量),創建伺服器套接字並將其綁定到指定的本地埠號。
ServerSocket(intport,intbacklog,InetAddressbindAddr):使用指定的埠、偵聽backlog和要綁定到的本地IP地址創建伺服器。
Socket:客戶端要與伺服器建立連接,必須先創建一個Socket對象
常用構造方法
Socket(Stringhost,intport):創建一個流套接字並將其連接到指定主機上的指定埠號。
Socket(InetAddressaddress,intport):創建一個流套接字並將其連接到指定IP地址的指定埠號。
伺服器端程序調用ServerSocket類中的accept()方法等待客戶端的連接請求,一旦accept()接收了客戶端連接請求,該方法返回一個與該客戶端建立了專線連接的Socket對象,不用程序去創建這個Socket對象。建立了連接的兩個Socket是以IO流的方式進行數據交換的,Java提供了Socket類中的getInputStream()返回Socket的輸入流對象,getOutputStream()返回Socket的輸出流對象。
TCP伺服器與TCP客戶端間的數據的接受圖示:
用TCP實現伺服器與客戶端的「聊天」:
實例代碼:
客戶端:
packagecom.hbsi.net;
importjava.net.Socket;
importjava.io.*;
publicclassTcpClient{
publicstaticvoidmain(String[]args)throwsException{
//1.建立tcp客戶端socket,要確定要連接的伺服器ip,port
Sockets=newSocket("192.168.49.87",9009);
//獲取鍵盤錄入
BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in));
//2.通過建立的socket,獲取輸出流對象
//數據輸出給伺服器端
OutputStreamout=s.getOutputStream();
BufferedWriterbwout=newBufferedWriter(newOutputStreamWriter(out));
//獲取伺服器端返回的數據
//讀取伺服器端發過來的信息InputStreamReader()
BufferedReaderbrin=newBufferedReader(newInputStreamReader(
s.getInputStream()));
Stringline=null;
while((line=br.readLine())!=null){
if(line.equals("over"))
break;
bwout.write(line);
bwout.newLine();
bwout.flush();
Stringstr=brin.readLine();
System.out.println("server:"+str);
}
br.close();
s.close();
}
}
伺服器端:
packagecom.hbsi.net;
importjava.io.BufferedReader;
importjava.io.BufferedWriter;
importjava.io.InputStream;
importjava.io.InputStreamReader;
importjava.io.OutputStreamWriter;
importjava.net.ServerSocket;
importjava.net.Socket;
publicclassTcpServer{
publicstaticvoidmain(String[]args)throwsException{
//1.建立伺服器socket
ServerSocketss=newServerSocket(9009);
//2.調用accept()
Sockets=ss.accept();
System.out.println(s.getInetAddress().getHostAddress()
+"...connection");
//讀取客戶的信息的輸入流
InputStreamin=s.getInputStream();
BufferedReaderbrin=newBufferedReader(newInputStreamReader(in));
//向客戶端發送信息輸出流,服務端向客戶端返回信息OutputStreamWriter()
BufferedWriterbrout=newBufferedWriter(newOutputStreamWriter(
s.getOutputStream())); Stringline=null;
while((line=brin.readLine())!=null){
System.out.println("client:"+line);
brout.write(line.toUpperCase());//伺服器端收到信息後,將信息轉為大寫返回給客戶端toUpperCase()
brout.newLine();
brout.flush();
}
s.close();
ss.close();
}
}
F. java如何通過tcp發送指令
基於Scoket實現,基本原理伺服器啟動後綁定相應的埠,在該埠上進行監聽,當客戶端向該伺服器發送請求後,伺服器接收處理後反饋給客戶端。 文件一: SocketServer.java ----> Socket伺服器端package com.huameng.socket.next;import java.net.ServerSocket;/**
* 伺服器端Socket
*
* @author Administrator
*
*/
public class SocketServer { /**
* 伺服器端Socket構造方法
*/
public SocketServer() {
try { int clientcount = 0; // 統計客戶端總數 boolean listening = true; // 是否對客戶端進行監聽 ServerSocket server = null; // 伺服器端Socket對象 try {
// 創建一個ServerSocket在埠2121監聽客戶請求
server = new ServerSocket(2121); System.out.println("Server starts...");
} catch (Exception e) {
System.out.println("Can not listen to. " + e);
} while (listening) {
// 客戶端計數
clientcount++; // 監聽到客戶請求,根據得到的Socket對象和客戶計數創建服務線程,並啟動之
new ServerThread(server.accept(), clientcount).start();
}
} catch (Exception e) {
System.out.println("Error. " + e);
}
} /**
* 主方法
*
* @param args
*/
public static void main(String[] args) {
new SocketServer();
}
} 文件二: ServerThread.java ----> 伺服器監控器package com.huameng.socket.next;import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;public class ServerThread extends Thread { private static int number = 0; // 保存本進程的客戶計數 Socket socket = null; // 保存與本線程相關的Socket對象 public ServerThread(Socket socket, int clientnum) { this.socket = socket;
number = clientnum;
System.out.println("當前在線的用戶數: " + number);
} public void run() {
try { // 由Socket對象得到輸入流,並構造相應的BufferedReader對象
BufferedReader in = new BufferedReader(new InputStreamReader(socket
.getInputStream())); // 由Socket對象得到輸出流,並構造PrintWriter對象
PrintWriter out = new PrintWriter(socket.getOutputStream()); // 由系統標准輸入設備構造BufferedReader對象
BufferedReader sysin = new BufferedReader(new InputStreamReader(
System.in)); // 在標准輸出上列印從客戶端讀入的字元串
System.out.println("[Client " + number + "]: " + in.readLine()); String line; // 保存一行內容 // 從標准輸入讀入一字元串
line = sysin.readLine(); while (!line.equals("bye")) { // 如果該字元串為 "bye",則停止循環 // 向客戶端輸出該字元串
out.println(line); // 刷新輸出流,使Client馬上收到該字元串
out.flush(); // 在系統標准輸出上列印讀入的字元串
System.out.println("[Server]: " + line); // 從Client讀入一字元串,並列印到標准輸出上
System.out.println("[Client " + number + "]: " + in.readLine()); // 從系統標准輸入讀入一字元串
line = sysin.readLine();
} out.close(); // 關閉Socket輸出流
in.close(); // 關閉Socket輸入流
socket.close(); // 關閉Socket
} catch (Exception e) {
System.out.println("Error. " + e);
}
}} 文件三: ScoketClient.java ----> Scoket客戶端package com.huameng.socket.next;import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;/**
* 客戶端Socket
*
* @author Administrator
*
*/
public class SocketClient { /**
* 客戶端Socket構造方法
*/
public SocketClient() {
try { // 向本機的2121埠發出客戶請求
Socket socket = new Socket("localhost", 2121); System.out.println("Established a connection..."); // 由系統標准輸入設備構造BufferedReader對象
BufferedReader sysin = new BufferedReader(new InputStreamReader(
System.in)); // 由Socket對象得到輸出流,並構造PrintWriter對象
PrintWriter out = new PrintWriter(socket.getOutputStream()); // 由Socket對象得到輸入流,並構造相應的BufferedReader對象
BufferedReader in = new BufferedReader(new InputStreamReader(socket
.getInputStream())); String line; // 保存一行內容 // 從系統標准輸入讀入一字元串
line = sysin.readLine(); while (!line.equals("bye")) { // 若從標准輸入讀入的字元串為 "bye"則停止循環 // 將從系統標准輸入讀入的字元串輸出到Server
out.println(line); // 刷新輸出流,使Server馬上收到該字元串
out.flush(); // 在系統標准輸出上列印讀入的字元串
System.out.println("[Client]: " + line); // 從Server讀入一字元串,並列印到標准輸出上
System.out.println("[Server]: " + in.readLine()); // 從系統標准輸入讀入一字元串
line = sysin.readLine(); } out.close(); // 關閉Socket輸出流
in.close(); // 關閉Socket輸入流
socket.close(); // 關閉Socket
} catch (Exception e) {
System.out.println("Error. " + e);
}
} /**
* 主方法
*
* @param args
*/
public static void main(String[] args) {
new SocketClient();
}}
G. 用java編寫一個能進行簡單TCP/IP通信的C/S程序
import java.net.ServerSocket;
import java.net.Socket;
public class TcpServer
{
public static void main(String[] args) throws Exception
{
// 創建伺服器端的socket對象
ServerSocket ss = new ServerSocket(5000);
// 監聽連接
Socket socket = ss.accept();
// 直到連接建立好之後代碼才會往下執行
System.out.println("Connected Successfully!");
}
}
import java.net.Socket;
public class TcpClient
{
public static void main(String[] args) throws Exception
{
Socket socket = new Socket("127.0.0.1", 5000);
}
}