本案例是实现编写客户端负责发送内容、服务器端用来接收内容的程序。
1.编写服务器端程序(hello.java)
该程序是负责接收数据,需要单独编译运行。可以采用eclipse编译,编译之后将文件保存在d盘。
如若存在c盘,可能会因为没有权限,命令提示符而不能正常执行。
public class hello implements Runnable {
public static final String Server_ip="填写自己电脑的IP地址";
public static final int Server_port=4000;//填写电脑内未被占用的端口号
public void run() {
System.out.println("S:Connectioning...");
try{
ServerSocket serverSocket=new ServerSocket(Server_port);
while(true){
Socket client=serverSocket.accept();
System.out.println("S:Receing...");
try {
BufferedReader breader=new BufferedReader(new InputStreamReader(client.getInputStream()));
String str=breader.readLine();
System.out.println("S:Received:"+str);
} catch (Exception e) {
System.out.println("S:ERROR");
e.printStackTrace();
}finally {
client.close();
System.out.println("S:Done");
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Thread thread=new Thread(new hello());
thread.start();
}
}
上述代码中设置服务器端口为4000,然后通过 accept ()方法使服务器开始监听客户端的连接,然后通过 BufferReader 对象来接收输人流。最后关闭 Socket 和流。
2,编写客户端布局
文件客户端布局界面包含一个 EditText 组件和一个按钮,按钮负责把输人的内容发送到服务器端。
2.编写 MainActivity 代码
MainActivity 负责客户端的实现,在按钮事件中通过“ socket = new Socket ( ip ,port )” 请求连接服务器,并通过 BufferedWriter 发送消息。
public class MainActivity extends AppCompatActivity {
private EditText mes;
private Button send_btn;
private String ip="自己电脑的IP地址";
private int port=4000;//电脑内未被占用的端口号
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout);
if(Build.VERSION.SDK_INT>8){
StrictMode.ThreadPolicy policy=new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}
init();
}
public void init(){
mes=(EditText) findViewById(R.id.mes);
send_btn=(Button) findViewById(R.id.send);
send_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
try {
String string=mes.getText().toString();
if(!TextUtils.isEmpty(string)){
SendMes(ip,port,string);
}
else{
Toast.makeText(MainActivity.this, "请先输入内容", Toast.LENGTH_SHORT).show();
mes.requestFocus();
}
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
private void SendMes(String ip,int port,String mes) throws UnknownHostException, IOException {
try {
Socket socket=null;
socket=new Socket(ip,port);
BufferedWriter writer=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
writer.write(mes);
writer.flush();
writer.close();
socket.close();
}catch (UnknownHostException e){
e.printStackTrace();
}catch (IOException e){
e.printStackTrace();
}
}
}
4.添加网络权限
5.运行运行程序,输入要发送的消息,然后单击“发送消息”按钮,出现的结果。
客户端与服务器端连接成功并且发送了消息。这就是 Socket 通信的具体步骤,开发者可以使用 Socket 通信开发一些更为复杂的应用。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)