Android客户端与服务器用Socket进行通信

Android客户端与服务器用Socket进行通信(简单,基础)

#####哈哈哈,很久没有好好学习了,今天写一个关于通信的,我也是刚刚学到,代码还不完善,,,,有问题请大家指出

#Android客户端
###首先建立一个main.java的文件,andriod端与服务器端的链接必须使用子线程,否者会堵塞主线程(UI线程是主线程),下面是代码
##Java文件


public class MainActivity extends AppCompatActivity {
    public EditText edit;
    public Socket s;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        edit = findViewById(R.id.et_edit);
    }
    public void send(View view) {
        final String et = edit.getText().toString();

        new Thread(new Runnable() {//线程进行Socket连接以及传输数据
            @Override
            public void run() {
                try {
                    //使用这个线程就可以改变主线程的内容,可以不使用handler机制
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Toast.makeText(MainActivity.this,et,Toast.LENGTH_SHORT).show();
                        }
                    });
                    Socket s=new Socket("192.168.0.108",6666);//创建一个Socket对象,第一个参数是要访问服务器的1p地址,第二个参数为端口,与服务器一致
                    //OutputStream os=s.getOutputStream();//Socket对象调用getOutputStream方法获取输出流
                    //byte[] aa=et.getBytes();et是获取到的一个editview控件的值,把获取的值转化为byte类型
                    //os.write(aa);OutputStream 对象调用write方法进行写数据
                    s.getOutputStream().write(et.getBytes());
                    //BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(os));
                    //bw.write(et);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }

##布局文件

 <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        android:orientation="horizontal">

        <EditText
            android:id="@+id/et_edit"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_weight="1"/>

        <Button
            android:id="@+id/bt_send"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:onClick="send"
            android:text="发送" />
    </LinearLayout>

#服务器端代码

public class Message {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
			try {
			ServerSocket ss=new ServerSocket(6666);//创建ServerSocket 对象,指定端口
			Socket socket=ss.accept();//阻塞等待客户端连接,调用ServerSocket的accept()方法接收一个客户端请求,得到一个Socket
			System.out.print("连接成功");
		    byte[] aa=new byte[2048];//创建一个2048byte的数组
		    int len=socket.getInputStream().read(aa);Socket对象调用getInputStream方法获取输入流,读取传入的数据以及长度,并把数据放到数组中
		    String bb=new String(aa,0,len); 从数组中将byte类型的数据转化为string类型
			//BufferedReader bReader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
			//String message=bReader.readLine();
			System.out.print("客户端传来的消息是"+bb);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

}

####over 客户端只有输出,服务器只有输入,很简单的代码,功能和代码也不完善,希望对您有帮助。。。。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值