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 客户端只有输出,服务器只有输入,很简单的代码,功能和代码也不完善,希望对您有帮助。。。。。。。