之前在學習的過程中,一路學,卻很少做總結,接下來的幾天裏,我將會整理一些自己曾經學過的技術。首先是Java的網絡編程,我這也算是拋磚引玉,歡迎各位大神指出不足。
首先簡單介紹一下相關的術語,主機(Host),就是一臺電腦,特指連接網絡的電腦;服務器(Server),指的是提供服務的主機或者程序;客戶端(Client),請求服務的主機或者程序;服務(Serverice),顧名思義,就是一種服務,例如,客戶端請求下載一個文件,服務器提供返回這個文件的數據,則稱爲“文件下載服務器”。
IP:服務器的主機地址 x.x.x.x 格式,端口:服務號,界於 1 ~ 65535 之間。簡單來說:IP地址用於標識一臺主機,而端口用於標識該主機上的一個服務。這些網絡通信的基本術語,接下來就是第一個簡單通訊例子:
1、首先是服務器端代碼
package my;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class MyServer
{
public static void main(String[] args) throws IOException
{
// TODO Auto-generated method stub
//建立服務器,服務於2019端口
ServerSocket serverSock = new ServerSocket(2019);
System.out.println("服務器啓動,等待連接...");
while(true)
{
//監聽請求,阻塞等待,直到有客戶端發起連接...
Socket conn = serverSock.accept();
//從連接裏得到輸入輸出流
//InputStream:可以讀取客戶端發來的數據
//OutputStream:可以發送數據給客戶端
InputStream inputStream = conn.getInputStream();
OutputStream outputStream = conn.getOutputStream();
//接收數據
byte[] inputData = new byte[4000];
int n = inputStream.read(inputData);
if(n <= 0)
{
conn.close();
continue;
}
//發送數據
String inputMsg = new String(inputData , 0 , n , "UTF-8");
System.out.println("GOT:" + inputMsg);
String outputMsg = "Welcome!";
byte[] ouputData = outputMsg.getBytes();
outputStream.write(ouputData);
System.out.println("ECHO:" + outputMsg + "\n");
//關閉連接
conn.close();
}
}
}
2、客戶端的代碼
package my;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.Socket;
public class MyClient
{
public static void main(String[] args) throws IOException
{
//一個Scoket代表一路連接
Socket sock = new Socket();
//連接至服務器
sock.connect(new InetSocketAddress("127.0.0.1" , 2019));
//InputStream用於接收數據,OutputStreet用於發送數據
InputStream inputStream = sock.getInputStream();
OutputStream outputStream = sock.getOutputStream();
//發送數據
String outputMsg = "Hello";
byte[] outputData = outputMsg.getBytes("UTF-8");
outputStream.write(outputData);
System.out.println(">>" + outputMsg);
//接收數據
byte[] inputData = new byte[4000];
int n = inputStream.read(inputData);
String inputMsg = new String(inputData , 0 , n , "UTF-8");
System.out.println("<<" + inputMsg);
//關閉連接
sock.close();
}
}
以上代碼是Java網絡編程簡單代碼框架,接下來的學習中都會根據以上的代碼進行學習與改進。