Java能接受其他通信实体连接请求的类是ServerSocket,ServerSocket对象用于监听客户端的Socket连接,如果没有连接,它将一直处于等待状态。
public class SimpleServer {
public static void main(String[] args) {
//创建ServerSocket,用于监听客户端Socket的连接请求
try {
ServerSocket ss = new ServerSocket(30000);
while(true)
{
System.out.println("有客户访问服务器");
//每当接受到客户端Socket的请求时,服务器端也对应产生一个Socket
Socket s = ss.accept();
OutputStream os = s.getOutputStream();
os.write("Helo,这是服务器返回的消息!".getBytes("utf-8"));
os.close();
s.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
客户端代码
public class MainActivity extends AppCompatActivity {
TextView textView;
Button btn;
Handler handler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.show);
btn = (Button)findViewById(R.id.button);
handler = new Handler(){
@Override
public void handleMessage(Message msg) {
switch (msg.what)
{
case 0:
Bundle bundle;
bundle = msg.getData();
textView.setText(bundle.getString("result","没有成功"));
}
}
};
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new Thread()
{
@Override
public void run() {
Message msg = handler.obtainMessage();
msg.what = 0;
Socket socket = null;
try {
socket = new Socket("10.20.0.1",30000);
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line = br.readLine();
Bundle bundle = new Bundle();
bundle.putString("result",line);
msg.setData(bundle);
br.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
handler.sendMessage(msg);
}
}.start();
}
});
}
}