服务器使用java代码
1.服务端需要创建一个ServerSocket(port)
2.port(端口)地址范围在0~65535请使用1024以上的端口,尽量偏大使用,否则可能和你主机上的其他应用程序产生端口冲突
3.ServerSocket.accept() 来接收客户端发送的socket连接,该方法会返回一个socket实例,就是 服务端和客户端建立的连接
4.OutputStream os = socket.getOutputStream() 获得socket向对端的输出流
os.write("字符串".getBytes("utf-8") 向socket对端发送数据,编码格式是utf-8
5.socket.getInputStream()获得对端发送的输入流
一般用new BufferedReader(new InputStreamReader(socket.getInputStream()) 包装为BufferedReader 使用其 readLine()方法直接读取一条字符串
下面是一个简单的服务器和Android客户端建立连接的demo :
服务器一直循环接收客户端请求,客户端发送请求后建立连接,服务器返回一个hello,客户端Log输出该数据,双方连接关闭
***我的服务器运行环境是 linux (使用的阿里云)***
服务端代码
public class SimpleServer
{
public static void main(String[] args) throws IOException
{
//创建一个ServerSocket 用于监听客户端Socket的连接请求
ServerSocket ss = new ServerSocket(30000);
//采用循环不断的接收来自客户端的请求
while(true)
{
//每当接收到客户端Socket的请求,服务端也对应产生一个Socket
Socket s = ss.accept();
//获得 socket对端的输出流
OutputStream os = s.getOutputStream();
//向socket另一端发送一句 Hello
os.write("Hello!\n".getBytes("utf-8");
//关闭输出流,关闭socket
os.close();
s.close();
}
}
}Android客户端代码
public class SimpleClient extends Activity
{
//布局文件代码省略,因为没有用到布局文件的内容
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//连接网络的部分放在子线程中,防止主线程阻塞
new Thread()
{
public void run()
{
try
{
//建立连接到远程服务器的Socket
//服务器ip要么是公网ip 要么是和你在一个局域网下的服务器的局域网ip地址
Socket socket = new Socket("120.27.112.250“,30000);
//将Socket对应的输入流包装为BufferedReader
BufferedReader br = new BufferedReader{
new InputStreamReader(socket.getInputStream()));
String content = br.readLine();
//这里注意,如果你想把你收到的数据,显示到界面上,在这里不能直接操作的
//因为Android 子线程中是不能更新ui的,需要在主线程中建立Handler,然后向handler发送message才可以
Log.e("收到服务器消息",content);
br.close();
socket.close();
}
catch(IOException e)
{
e.printStackTrace();
}
}
}.start();
}
}参考:疯狂Android讲义
代码基本是书上的,加入自己的一些注释和理解
有问题欢迎留言讨论
版权声明:本文为MR_D_j原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。