java socket send_java socket编程
TcpServer
Server端所要做的事情主要是建立一個通信的端點,然后等待客戶端發送的請求。典型的處理步驟如下:
1. 構建一個ServerSocket實例,指定本地的端口。這個socket就是用來監聽指定端口的連接請求的。
2. 調用socket的accept()方法來獲得下面客戶端的連接請求。通過accept()方法返回的socket實例,建立了一個和客戶端的新連接。
3.通過這個返回的socket實例獲取InputStream和OutputStream,可以通過這兩個stream來分別讀和寫數據。
4.結束的時候調用socket實例的close()方法關閉socket連接。
packagesocket;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.Reader;importjava.net.ServerSocket;importjava.net.Socket;public classServer {public static void main(String args[]) throwsIOException {//為了簡單起見,所有的異常信息都往外拋
int port = 8899;//定義一個ServerSocket監聽在端口8899上
ServerSocket server = newServerSocket(port);//server嘗試接收其他Socket的連接請求,server的accept方法是阻塞式的
Socket socket =server.accept();//跟客戶端建立好連接之后,我們就可以獲取socket的InputStream,并從中讀取客戶端發過來的信息了。
Reader reader = newInputStreamReader(socket.getInputStream());char chars[] = new char[64];intlen;
StringBuilder sb= newStringBuilder();while ((len=reader.read(chars)) != -1) {
sb.append(new String(chars, 0, len));
}
System.out.println("from client: " +sb);
reader.close();
socket.close();
server.close();
}
}
TcpClient端
客戶端的請求過程稍微有點不一樣:
1.構建Socket實例,通過指定的遠程服務器地址和端口來建立連接。
2.通過Socket實例包含的InputStream和OutputStream來進行數據的讀寫。
3.操作結束后調用socket實例的close方法,關閉。
packagesocket;importjava.io.OutputStreamWriter;importjava.io.Writer;importjava.net.Socket;public classClient {public static void main(String args[]) throwsException {//為了簡單起見,所有的異常都直接往外拋
String host = "10.21.23.144"; //要連接的服務端IP地址
int port = 8899; //要連接的服務端對應的監聽端口//與服務端建立連接
Socket client = newSocket(host, port);//建立連接后就可以往服務端寫數據了
Writer writer = newOutputStreamWriter(client.getOutputStream());
writer.write("Hello mynona Server.");
writer.flush();//寫完后要記得flush
writer.close();
client.close();
}
}
Udp:
server端
因為UDP協議不需要建立連接,它的過程如下:
1. 構造DatagramSocket實例,指定本地端口。
2. 通過DatagramSocket實例的receive方法接收DatagramPacket.DatagramPacket中間就包含了通信的內容。
3. 通過DatagramSocket的send和receive方法來收和發DatagramPacket.
packageUdp2;importjava.net.DatagramPacket;importjava.net.DatagramSocket;importjava.net.InetAddress;public classUDPServer {public static void main(String args[]) throwsException
{//監聽9876端口
DatagramSocket serverSocket = new DatagramSocket(9876);byte[] receiveData = new byte[1024];byte[] sendData = new byte[1024];while(true)
{//構造數據包接收數據
DatagramPacket receivePacket = newDatagramPacket(receiveData, receiveData.length);//接收數據
serverSocket.receive(receivePacket);//解析數據
String sentence = newString( receivePacket.getData());
System.out.println("RECEIVED: " +sentence);
InetAddress IPAddress=receivePacket.getAddress();int port =receivePacket.getPort();
String capitalizedSentence=sentence.toUpperCase();
sendData=capitalizedSentence.getBytes();//構造發送數據包發送數據
DatagramPacket sendPacket = newDatagramPacket(sendData, sendData.length, IPAddress, port);
serverSocket.send(sendPacket);
}
}
}
UdpClient:
1. 構造DatagramSocket實例。
2.通過DatagramSocket實例的send和receive方法發送DatagramPacket報文。
3.結束后,調用DatagramSocket的close方法關閉。
packageUdp2;importjava.io.BufferedReader;importjava.io.InputStreamReader;importjava.net.DatagramPacket;importjava.net.DatagramSocket;importjava.net.InetAddress;public classUDPClient {public static void main(String args[]) throwsException
{
BufferedReader inFromUser=
new BufferedReader(newInputStreamReader(System.in));
DatagramSocket clientSocket= newDatagramSocket();
InetAddress IPAddress= InetAddress.getByName("localhost");
System.out.println("IPAddress:" +IPAddress);byte[] sendData = new byte[1024];byte[] receiveData = new byte[1024];
String sentence=inFromUser.readLine();
sendData=sentence.getBytes();//發送數據
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 9876);
clientSocket.send(sendPacket);//接收數據
DatagramPacket receivePacket = newDatagramPacket(receiveData, receiveData.length);
clientSocket.receive(receivePacket);
String modifiedSentence= newString(receivePacket.getData());
System.out.println("FROM SERVER:" +modifiedSentence);
clientSocket.close();
}
}
參考來源:http://shmilyaw-hotmail-com.iteye.com/blog/1556187
http://haohaoxuexi.iteye.com/blog/1979837
總結
以上是生活随笔為你收集整理的java socket send_java socket编程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言的使用比例远远高于python语言
- 下一篇: java 继承 冒号_java继承(ex