本文介紹SOCKET 的服務端和用戶端的開發。 在本文中並沒有使用非同步來對資料進行接收。 因為網上太多有關非同步、儲存用戶端SOCKET的例子了, 但是他們的代碼都非常的多, 非常的繁瑣, 所以這裡就去掉了非同步資料接收等。
首先介紹服務端: 這裡代碼實現的是服務端開啟後就等待用戶端的串連, 當用戶端串連上後就接收訊息, 並發訊息回去後馬上關閉連結。
如果需要做類是聊天室軟體的話需要加上“非同步處理”
[java]
public class SocketServer
{
private ServerSocket mServerSocket;
private static final int SERVER_PORT = 6000; //連接埠
public SocketServer()
{
}
public boolean startServer()
{
boolean bRet = false;
try
{
//建立一個SOCKET 伺服器
mServerSocket = new ServerSocket(SERVER_PORT);
bRet = true;
} catch (Exception e)
{
// TODO: handle exception
}
return bRet;
}
public void recv()
{
try
{
Socket socket = mServerSocket.accept();
//拿到用戶端的輸入輸出(讀取,發送)
InputStream is = socket.getInputStream();
PrintWriter pw = new PrintWriter(socket.getOutputStream());
//這裡讀取用戶端第一次發來的訊息 調試來看吧
byte buffer[] = new byte[1024];
int reCount = is.read(buffer);
String msgString = EncodingUtils.getString(buffer, "GB2312");
//我們發回一個"aa"給用戶端
pw.print("aa");
pw.flush();
//關掉這個串連
socket.close();
} catch (Exception e)
{
// TODO: handle exception
}
}
public void close()
{
try
{
mServerSocket.close();
} catch (Exception e)
{
// TODO: handle exception
}
}
}
用戶端:
[java]
public class SocketClient
{
private Socket socket;
private InputStream mInputStream;
private PrintWriter mPrintWriter;
private static final String SERVER_IP = "192.168.1.24";
private static final int SERVER_PORT = 6000;
public SocketClient()
{
}
public boolean connection()
{
boolean bRet = false;
try
{
//建立一個用戶端串連
InetAddress ia = InetAddress.getByName(SERVER_IP);
socket = new Socket(ia, SERVER_PORT);
//擷取這個用戶端串連SOCKET的輸入輸出
mPrintWriter = new PrintWriter(socket.getOutputStream(), true);
mInputStream = socket.getInputStream();
bRet = true;
} catch (Exception e)
{
// TODO: handle exception
}
return bRet;
}
//發送訊息
public void sendMsg(String msg)
{
mPrintWriter.print(msg);
mPrintWriter.flush();
}
//讀取訊息
public String readMsg()
{
String msgString = "";
try
{
byte buffer[] = new byte[1024];
int reCount = mInputStream.read(buffer);
msgString = EncodingUtils.getString(buffer, "GB2312");
} catch (Exception e)
{
// TODO: handle exception
}
return msgString;
}
public void close()
{
try
{
socket.close();
} catch (Exception e)
{
// TODO: handle exception
}
}
}
主:
[java]
private android.view.View.OnClickListener btnClickListener = new android.view.View.OnClickListener()
{
@Override
public void onClick(View v)
{
int id = v.getId();
switch (id)
{
case R.id.btn:
{
SocketClient socketClient = new SocketClient();
socketClient.connection();
socketClient.sendMsg("123");
socketClient.sendMsg("123");
socketClient.sendMsg("123");
socketClient.sendMsg("123");
String r = socketClient.readMsg();
socketClient.close();
Toast.makeText(SocketActivity.this, r, Toast.LENGTH_LONG).show();
}
break;
case R.id.btn_server:
{
SocketServer socketServer = new SocketServer();
socketServer.startServer();
socketServer.recv();
socketServer.close();
}
break;
default:
break;
}
}
};
作者:KnowHeart