javatcpsocket編程
1. java socket基於TCP/IP協議編程,是這樣寫的JAVA代碼,伺服器端:I/O流和server
http://www.cnblogs.com/linzheng/archive/2011/01/23/1942328.html 對照的例子 親手寫一個 好好閱讀文檔 很容易就學會了
2. 誰有java tcp/ip socket編程 的源代碼
先來介紹下網路協議: TCP/IP Transmission Control Protocol 傳輸控制協議 Internet Protocol 互聯網協議 UDP User Datagram Protocol 用戶數據協議 連接協議: 分為: 面向連接協議: Connection Oriented Protocol 非連接協議: Connectionless
3. java編程中,Socket通信是怎麼實現的
java編程對於Socket之間的通信過程如下:
服務端往Socket的輸出流裡面寫東西,客戶端就可以通過Socket的輸入流讀取對應的內容。Socket與Socket之間是雙向連通的,所以客戶端也可以往對應的Socket輸出流裡面寫東西,然後服務端對應的Socket的輸入流就可以讀出對應的內容。下面來看一些服務端與客戶端通信的例子:
publicclassServer{
publicstaticvoidmain(Stringargs[])throwsIOException{
//為了簡單起見,所有的異常信息都往外拋
intport=8899;
//定義一個ServerSocket監聽在埠8899上
ServerSocketserver=newServerSocket(port);
//server嘗試接收其他Socket的連接請求,server的accept方法是阻塞式的
Socketsocket=server.accept();
//跟客戶端建立好連接之後,我們就可以獲取socket的InputStream,並從中讀取客戶端發過來的信息了。
Readerreader=newInputStreamReader(socket.getInputStream());
charchars[]=newchar[64];
intlen;
StringBuildersb=newStringBuilder();
while((len=reader.read(chars))!=-1){
sb.append(newString(chars,0,len));
}
System.out.println("fromclient:"+sb);
reader.close();
socket.close();
server.close();
}
}
客戶端代碼
Java代碼publicclassClient{
publicstaticvoidmain(Stringargs[])throwsException{
//為了簡單起見,所有的異常都直接往外拋
Stringhost="127.0.0.1";//要連接的服務端IP地址
intport=8899;//要連接的服務端對應的監聽埠
//與服務端建立連接
Socketclient=newSocket(host,port);
//建立連接後就可以往服務端寫數據了
Writerwriter=newOutputStreamWriter(client.getOutputStream());
writer.write("HelloServer.");
writer.flush();//寫完後要記得flush
writer.close();
client.close();
}
}
4. 用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);
}
}
5. JAVA TCP Socket編程 計算題
伺服器端CalculateServer.java:
packageserverMole;
importjava.io.BufferedReader;
importjava.io.IOException;
importjava.io.InputStreamReader;
importjava.io.PrintStream;
importjava.net.ServerSocket;
importjava.net.Socket;
publicclassCalculateServer{
publicstaticvoidmain(String[]args){
=newCalculateServer();
try{
calculateServer.startServer();
}catch(Exceptione){
e.printStackTrace();
System.out.println("伺服器出錯!");
}
}
//把輸入的字元串轉換成float數組
publicfloat[]convertToArray(StringinputString){
StringnumberString=inputString.substring(inputString.indexOf('[')+1,inputString.indexOf(']'));
String[]stringArray=numberString.split(",");
float[]numberArray=newfloat[2];
for(inti=0;i<2;i++){
try{
numberArray[i]=Float.parseFloat(stringArray[i]);
}catch(NumberFormatExceptione){
System.out.println("數字錯誤!");
returnnull;
}
}
returnnumberArray;
}
//計算數組結果
publicStringgetResultString(float[]numberArray){
float[]result=newfloat[4];
result[0]=numberArray[0]+numberArray[1];
result[1]=numberArray[0]=numberArray[1];
result[2]=numberArray[0]*numberArray[1];
result[3]=numberArray[0]/numberArray[1];
StringresultString=String.format("[%1$s,%2$s,%3$s,%4$s]",result[0],result[1],result[2],result[3]);
returnresultString;
}
//socketServer
publicvoidstartServer()throwsException{
ServerSocketserverSocket=null;
PrintStreamout=null;
BufferedReaderin=null;
SocketsocketObj=null;
try{
serverSocket=newServerSocket(1888);
System.out.println("伺服器啟動...");
socketObj=serverSocket.accept();
out=newPrintStream(socketObj.getOutputStream());
in=newBufferedReader(newInputStreamReader(socketObj.getInputStream()));
}catch(IOExceptione){
System.out.println("伺服器啟動失敗!");
}
booleanflag=true;
CalculateServercs=newCalculateServer();
try{
while(flag){
StringinputString=in.readLine();
System.out.println("接收到數據:"+inputString);
if(inputString.equals("bye")){
flag=false;
continue;
}
if(inputString==null||inputString.length()<5){
out.println("你的輸入有誤!");
}else{
out.println(cs.getResultString(cs.convertToArray(inputString)));
}
}
}catch(Exceptione){
out.println("數據輸入有誤!");
}finally{
out.close();
in.close();
socketObj.close();
serverSocket.close();
}
}
}
客戶端CalculateClient.java
packageclientMole;
importjava.io.BufferedReader;
importjava.io.InputStreamReader;
importjava.io.PrintStream;
importjava.net.Socket;
publicclassCalculateClient{
publicstaticvoidmain(String[]args){
=newCalculateClient();
try{
calculateClient.startClient();
}catch(Exceptione){
System.out.println("啟動失敗!");
}
}
publicvoidstartClient()throwsException{
SocketsocketObj=newSocket("localhost",1888);
PrintStreamout=null;
BufferedReaderin=null;
out=newPrintStream(socketObj.getOutputStream());
in=newBufferedReader(newInputStreamReader(socketObj.getInputStream()));
BufferedReaderlocalInput=null;
localInput=newBufferedReader(newInputStreamReader(System.in));
booleanflag=true;
while(flag){
System.out.println("請輸入兩個數字,格式為[number1,number2],輸入bye則退出:");
StringinputString=localInput.readLine();
out.println(inputString);
if(inputString.equals("bye")){
flag=false;
}else{
Stringinput=in.readLine();
System.out.println("伺服器返回結果為:");
System.out.println(input);
}
}
out.close();
in.close();
localInput.close();
socketObj.close();
}
}
6. java tcp協議的 socket編程,服務端為java工程,客戶端為web項目,在servlet里進行socket請求,誰做過
用一個線程監聽埠,沒一個請求都用單獨的一個線程處理,以多線程方式執行就可以了。如果是單線程模式,肯定是有阻塞的。
7. JAVA Socket 底層是怎樣基於TCP/IP 實現的
首先必須明確:TCP/IP模型中有四層結構: 應用層(Application Layer)、傳輸層(Transport Layer)、網路層(Internet Layer
)、鏈路層(LinkLayer)
其中Ip協議(Internet Protocol)是位於網路層的,TCP協議時位於傳輸層的。通過Ip協議可以使可以使兩台計算機使用同一種語言,從而允許Internet上連接不同類型的計算機和不同操作系統的網路。Ip協議只保證計算機能夠接收和發送分組數據。當計算機要和遠程的計算機建立連接時,TCP協議會讓他們建立連接:用於發送和接收數據的虛擬電路。
套接字或插座(socket)是一種軟體形式的抽象,用於表達兩台機器間一個連接的「終端」。針對一個特定的連接,每台機器上都有一個「套接字」,可以想像它們之間有一條虛擬的「線纜」。JAVA
有兩個基於數據流的套接字類:ServerSocket,伺服器用它「偵聽」進入的連接;Socket,客戶端用它初始一次連接。偵聽套接字只能接收新的連接請求,不能接收實際的數據包,即ServerSocket不能接收實際的數據包。
套接字是基於TCP/IP實現的,它是用來提供一個訪問TCP的服務介面,或者說套接字socket是TCP的應用編程介面API,通過它應用層就可以訪問TCP提供的服務。
在JAVA中,我們用 ServerSocket、Socket類創建一個套接字連接,從套接字得到的結果是一個InputStream以及OutputStream對象,以便將連接作為一個IO流對象對待。通過IO流可以從流中讀取數據或者寫數據到流中,讀寫IO流會有異常IOException產生。
8. 我要一份用java網路編程寫的點對點的兩人聊天程序(TCP和UDP)
Server端:
import java.io.*;
import java.net.*;
import java.applet.Applet;
public class TalkServer{
public static void main(String args[]) {
try{
ServerSocket server=null;
try{
server=new ServerSocket(4700);
}catch(Exception e) {
System.out.println("can not listen to:"+e);
}
Socket socket=null;
try{
socket=server.accept();
}catch(Exception e) {
System.out.println("Error."+e);
}
String line;
BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter os=new PrintWriter(socket.getOutputStream());
BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));
System.out.println("Client:"+is.readLine());
line=sin.readLine();
while(!line.equals("bye")){
os.println(line);
os.flush();
System.out.println("Server:"+line);
System.out.println("Client:"+is.readLine());
line=sin.readLine();
}
os.close();
is.close();
socket.close();
server.close();
}catch(Exception e){
System.out.println("Error:"+e);
}
}
}
Client端:
import java.io.*;
import java.net.*;
public class TalkClient {
public static void main(String args[]) {
try{
Socket socket=new Socket("127.0.0.1",4700);
BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));
PrintWriter os=new PrintWriter(socket.getOutputStream());
BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));
String readline;
readline=sin.readLine(); //從系統標准輸入讀入一字元串
while(!readline.equals("bye")){
os.println(readline);
os.flush();
System.out.println("Client:"+readline);
System.out.println("Server:"+is.readLine());
readline=sin.readLine(); //從系統標准輸入讀入一字元串
}
os.close(); //關閉Socket輸出流
is.close(); //關閉Socket輸入流
socket.close(); //關閉Socket
}catch(Exception e) {
System.out.println("Error"+e); //出錯,則列印出錯信息
}
}
}
9. JAVA Socket編程和C++Socket編程有什麼不同
Socket 是winsock里的原始套接字開發介面API,c++/java 他們是開發語言,而 socket 是一種通訊標准簡稱。首先,2者提供的介面不同(主要是封裝形式不同),java 本身不帶socket通訊底層實現的,而是通過調用系統底層的winsock API 進行的二次封裝,而c/c++ 的socket可以理解為 更接近 系統層面的winsock,所以c/c++ 的socket 可以提供 更多的底層擴展與控制。 其次,從語言上講,用JAVA發開出來的socket程序 可以在任何支持JAVA虛擬機上運行,不用修改任何代碼。而 C/c++ 要根據系統特性進行適當的修改。