Android客户端 和 pc服务器 建立socket连接并发送数据

服务器使用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讲义   

代码基本是书上的,加入自己的一些注释和理解

有问题欢迎留言讨论


你可能感兴趣的:(Android)