1. 程式人生 > >TCP/IP Socket通訊demo

TCP/IP Socket通訊demo

一個例項通過client端和server端通訊

客戶端傳送:“我是客戶端,請多關照”

服務端回覆:“收到來自於"+s.getInetAddress().getHostName()+"的資訊”

package com.ykw.net;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;

import org.junit.Test; //TCP_IP1 //客戶端給服務端傳送資訊。服務端輸出此資訊在控制檯上 //網路程式設計實際上就是Socket的程式設計 public class TestTCP1 { //客戶端 @Test public void client(){ Socket socket = null ; OutputStream os = null; try { //1.建立一個Socket的物件,通過構造器指明服務端的ip地址,以及接受程式的埠號 socket = new
Socket(InetAddress.getByName("127.0.0.1"),9090); //2.getOutputStream():傳送資料,方法返回OutputStream的物件 os = socket.getOutputStream(); //3.具體的輸出過程 os.write("我是客戶端,請多關照".getBytes()); } catch (IOException e) { e.printStackTrace(); }
finally{ //4.關閉相應的流和Socket物件 if(os!=null){ try { os.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(socket!=null){ try { socket.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } //伺服器端 @Test public void server(){ ServerSocket ss=null; Socket s=null; InputStream is=null; try { //1.建立一個ServerSocket物件,通過構造器指明自身的埠號 ss = new ServerSocket(9090); //2.呼叫其accept()方法,返回一個Socket物件 s = ss.accept(); //3.呼叫Socket物件的getInputStream()獲取一個從客戶端傳送過來的輸入流 is = s.getInputStream(); //4.對獲取的輸入流進行的操作 byte [] b = new byte[20]; int len; while((len = is.read(b))!=-1){ String str = new String(b,0,len); System.out.println(str); } System.out.println("收到來自於"+s.getInetAddress().getHostName()+"的資訊"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ //5.關閉相應的流以及Socket,ServerSocket的物件 if(is!=null){ try { is.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(s!=null){ try { s.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(ss!=null){ try { ss.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } }