?
?
總結:
?
服務器程序編寫:
①調用ServerSocket(int port)創建一個服務器端套接字,并綁定到指定端口上;②調用accept(),監聽連接請求,如果客戶端請求連接,則接受連接,返回通信套接字。③調用Socket類的getOutputStream()和getInputStream獲取輸出流和輸入流,開始網絡數據的發送和接收。④最后關閉通信套接字。
客戶端程序編寫:
①調用Socket()創建一個流套接字,并連接到服務器端; ②調用Socket類的getOutputStream()和getInputStream獲取輸出流和輸入流,開始網絡數據的發送和接收。 ③最后關閉通信套接字。
?
?
下面我們動手寫一個使用TCP協議通信的服務器端可客戶端:
?
服務器端:
package cn.com.xinli.test.socket;
import java.net.*;
import java.io.*;
public class SocketServer extends Thread
{
private Socket socket;
SocketServer(Socket s)
{
this.socket=s;
}
public void run()
{
try
{
OutputStream os=socket.getOutputStream();
/*在這里我們使用了帶緩沖的輸出流,因此與需要調用flush()
*或者當緩沖區滿了才會發送數據
*
* */
BufferedOutputStream bos=new BufferedOutputStream(os);
InputStream is=socket.getInputStream();
bos.write("歡迎你,我收到消息了!".getBytes());
bos.flush();
byte[] buf=new byte[100];
int len=is.read(buf);
System.out.println(new String(buf,0,len));
bos.close();
os.close();
is.close();
socket.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
Socket socket=new Socket();
SocketServer socketServer=new SocketServer(socket);
socketServer.server();
}
public static void server()
{
System.out.println("服務器啟動!");
try {
ServerSocket ss=new ServerSocket(6000);
while(true)
{
Socket socket=ss.accept();
new SocketServer(socket).start();
}
}
catch (Exception ex) {
ex.printStackTrace();
}
}
}
?
客戶端:
package cn.com.xinli.test.socket;
import java.net.*;
import java.io.*;
public class SocketClient
{
public static void main(String[] args)
{
SocketClient.client();
}
public static void client()
{
System.out.println("客戶端啟動!");
try {
Socket s=new Socket(InetAddress.getByName(null),6000);
OutputStream os=s.getOutputStream();
InputStream is=s.getInputStream();
byte[] buf=new byte[100];
int len=is.read(buf);
System.out.println(new String(buf,0,len));
os.write("我是流氓我怕誰".getBytes());
os.close();;
is.close();
s.close();
}
catch (Exception ex) {
ex.printStackTrace();
}
}
}
?
?
?
先運行服務器端,后運行客戶端,在雙方完成通信以后,服務器端并沒有推出,因為服務器端使用了多線程,每次來一個客戶端請求都會開一個線程來處理
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

