Socket通讯有两种首要方法:TCP协议和UDP协议,两者区别是TCP协议要首先和接纳方要树立衔接然后发送数据,这样数据能保证送达,但速度较慢;UDP协议首先把数据打包,然后直接发送到接纳方,无需树立衔接诶,速度快,但容易丢掉数据。这里是一个简略的基于TCP协议的通讯实例:
直接上代码:
首先是java服务器的编写:importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.OutputStreamWriter;importjava.io.PrintWriter;importjava.net.ServerSocket;importjava.net.Socket;publicclassnetserver{publicstaticvoidmain(String[]args)throwsIOException{ServerSocketserver=newServerSocket(9090);//9090是端口号,由自己设置System.out.println(“服务器已启动”);
Socketclient=server.accept();//接纳客户端恳求//PrintStreamout=newPrintStream(client.getOutputStream());PrintWriterout=newPrintWriter(newOutputStreamWriter(client.getOutputStream(),”UTF-8″),true);
BufferedReadermsg=newBufferedReader(newInputStreamReader(client.getInputStream(),”UTF-8″));//对缓冲区数据读取StringBufferinfo=newStringBuffer();//接纳客户端发来的音讯info.append(“I’mfine.你好!”);//回应的数据info.append(msg.readLine());//接纳的数据System.out.println(info);//控制台输出即将宣布的信息out.print(info);//发送到客户端out.close();
msg.close();
client.close();
server.close();
}
}
接下来是安卓客户端的代码:
packagecom.example.scoket;importandroidx.appcompat.app.AppCompatActivity;importandroid.os.Bundle;importandroid.os.Handler;importandroid.os.Message;importandroid.view.View;importandroid.widget.Button;importandroid.widget.EditText;importandroid.widget.TextView;importjava.io.BufferedReader;importjava.io.InputStreamReader;importjava.io.PrintStream;importjava.net.Socket;publicclassMainActivityextendsAppCompatActivity{privateButtonsend=null;privateTextViewinfo=null;privateHandlerhandler=null;privateStrings=””;
@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
send=(Button)findViewById(R.id.send);
info=(TextView)findViewById(R.id.info);
send.setOnClickListener(newView.OnClickListener(){
@OverridepublicvoidonClick(Viewv){newThread()
{publicvoidrun(){try{
Socketclient=newSocket(“10.0.2.2″,9090);//括号内为(服务器,端口号)PrintStreamout=newPrintStream(client.getOutputStream());
BufferedReadermsgget=newBufferedReader(newInputStreamReader(client.getInputStream(),”UTF-8”));//读取回来的数据out.println(“已衔接服务器”);
s=msgget.readLine();
out.close();
msgget.close();
client.close();
}catch(Exceptione)
{
e.printStackTrace();
}
handler.sendEmptyMessage(0);}}.start();
handler=newHandler(){//当有音讯发来的时分就执行Handler方法publicvoidhandleMessage(Messagemsg)
{super.handleMessage(msg);
info.setText(s);
}
};
}
});
}
}
服务器就填服务器的ip地址,如果服务器是在自己电脑上的,客户端在虚拟机上,那么服务器就填10.0.2.2,若是局域网衔接的,就用在win+r>cmd>config查询一下电脑的ip;端口号有必要与服务器一致,选择的端口如果显示被占用就换一个,端口的取值就自行百度。
1、IT大王遵守相关法律法规,由于本站资源全部来源于网络程序/投稿,故资源量太大无法一一准确核实资源侵权的真实性;
2、出于传递信息之目的,故IT大王可能会误刊发损害或影响您的合法权益,请您积极与我们联系处理(所有内容不代表本站观点与立场);
3、因时间、精力有限,我们无法一一核实每一条消息的真实性,但我们会在发布之前尽最大努力来核实这些信息;
4、无论出于何种目的要求本站删除内容,您均需要提供根据国家版权局发布的示范格式
《要求删除或断开链接侵权网络内容的通知》:https://itdw.cn/ziliao/sfgs.pdf,
国家知识产权局《要求删除或断开链接侵权网络内容的通知》填写说明: http://www.ncac.gov.cn/chinacopyright/contents/12227/342400.shtml
未按照国家知识产权局格式通知一律不予处理;请按照此通知格式填写发至本站的邮箱 wl6@163.com