客户端(android)和服务器端(swing) Scoket通信实例



转载自:http://www.eoeandroid.com/thread-92628-1-1.html

    老猫今天学习了Socket通信,特来此留贴一份以作纪念,废话不多说,直接进入主题:
         一个Socket通信的完成,需要客户端和服务器端的配合,这个配合就好比,两个人在电话中聊天,当甲拨出号码,乙在另一头接起电话时,他们直接就已经搭建了一个沟通的桥梁,对于客户端和服务器端是一样的。客户端通过Socket向指定ip地址的某端口发出数据通信请求,而服务器端此时也正在监听该端口的情况,也就是说,对于指定的ip地址和端口号我们完全可以认为是甲乙电话通讯时的电话号码。
       Socket通信分为两种一个是UDP,一个是TCP,UDP的好处是:速度快,但是缺点是此协议只管发送数据,并不管对方是否接收到数据,而TCP每次发出数据后都要等待对方传回数据做以肯定,然后再发送下一部分数据。但是速度不如UDP快。
    下面是我做的实例中的部分代码:
     第一部分:我利用swing写了一个服务器端,用于监听接收客户端发送来的数据,具体的界面和代码如下所示:



  1. public class SocketService extends JFrame {
  2. private JTextField nameTxt=null;
  3. String id="";
  4. public SocketService(){

  5. this.init();
  6. }
  7. public void init(){
  8. this.setTitle("Tcp服务器端");
  9. this.setBounds(100,100,400,250);
  10. this.createUI();
  11. //this.setVisible(true);
  12. this.setDefaultCloseOperation(EXIT_ON_CLOSE);
  13. }

  14. public void createUI(){
  15. JPanel panel=new JPanel();
  16. //添加边框
  17. Border border=BorderFactory.createEtchedBorder(EtchedBorder.LOWERED);
  18. TitledBorder tBorder=BorderFactory.createTitledBorder(border,"校验面板",TitledBorder.CENTER,TitledBorder.TOP);
  19. panel.setBorder(tBorder);
  20. panel.setLayout(null);
  21. this.add(panel);
  22. //网卡地址
  23. JLabel nameLbl=new JLabel("接收客户端数据:");
  24. nameLbl.setBounds(10,30,140,25);
  25. panel.add(nameLbl);
  26. nameTxt=new JTextField();
  27. nameTxt.setBounds(130,30,230,22);
  28. panel.add(nameTxt);


  29. //按钮
  30. JButton btn=new JButton("开启TCP服务");
  31. btn.setBounds(40,160,140,22);
  32. panel.add(btn);


  33. btn.addActionListener(new ActionListener(){
  34. public void actionPerformed(ActionEvent arg0){
  35. nameTxt.setText("");
  36. new TCPThread().start();
  37. }
  38. });


  39. JButton btn2=new JButton("开启UDP服务");
  40. btn2.setBounds(220, 160, 140, 22);
  41. panel.add(btn2);
  42. btn2.addActionListener(new ActionListener(){
  43. public void actionPerformed(ActionEvent arg0){
  44. nameTxt.setText("");
  45. new UDPThread().start();

  46. }
  47. });

  48. }
  49. //Tcp传输的操作过程
  50. class TCPThread extends Thread{

  51. public void run(){
  52. try {
  53. while(true){
  54. ServerSocket tcpSocket=null; 
  55. tcpSocket=new ServerSocket(4567);
  56. Socket s=null;
  57. s=tcpSocket.accept();//如果未收到数据,此句不会继续向下执行,一直处于监听状态
  58. InputStream in=s.getInputStream();
  59. byte[] buffer=new byte[1024*4];
  60. int temp=0;
  61. while((temp=in.read(buffer))!=-1){
  62. nameTxt.setText(new String(buffer,0,temp));
  63. }
  64. s.close();
  65. tcpSocket.close();


  66. }
  67. } catch (IOException e) {
  68. // TODO Auto-generated catch block
  69. e.printStackTrace();
  70. }


  71. }

  72. }
  73. //UDP传输的操作过程
  74. class UDPThread extends Thread{

  75. public void run(){
  76. try {
  77. DatagramSocket d=new DatagramSocket(5678);
  78. byte[] data=new byte[1024];
  79. DatagramPacket packer=new DatagramPacket(data, data.length);
  80. try {
  81. d.receive(packer);//如果未收到数据,此句不会继续向下执行,一直处于监听状态
  82. System.out.println(packer.getLength());
  83. } catch (IOException e) {
  84. // TODO Auto-generated catch block
  85. e.printStackTrace();
  86. }
  87. } catch (SocketException e) {
  88. // TODO Auto-generated catch block
  89. e.printStackTrace();
  90. }


  91. }


  92. }
复制代码

第二部分:客户端是利用android平台,具体的界面和他代码如下所示:


  1. public class SocketClient extends Activity {
  2. /** Called when the activity is first created. */
  3. TextView tv = null;

  4. @Override
  5. public void onCreate(Bundle savedInstanceState) {
  6. super.onCreate(savedInstanceState);
  7. setContentView(R.layout.main);
  8. Button tcpbtn = (Button) this.findViewById(R.string.Id1);
  9. Button udpbtn = (Button) this.findViewById(R.string.Id2);
  10. tv = (TextView) this.findViewById(R.string.text1);


  11. //tcp通信过程
  12. tcpbtn.setOnClickListener(new OnClickListener() {
  13. @Override
  14. public void onClick(View v) {
  15. try {
  16. Socket s = new Socket("192.168.0.115", 4567);//创建一个socket对象,绑定要通信的服务器端Ip和端口
  17. OutputStream out = s.getOutputStream();//将要传递的数据进行字节数组处理,然后以输出流的形式发送出去
  18. out.write(tv.getText().toString().getBytes());
  19. out.flush();
  20. } catch (UnknownHostException e) {
  21. // TODO Auto-generated catch block
  22. e.printStackTrace();
  23. } catch (IOException e) {
  24. // TODO Auto-generated catch block
  25. e.printStackTrace();
  26. }

  27. }

  28. });

  29. //udp通信过程
  30. udpbtn.setOnClickListener(new OnClickListener(){

  31. @Override
  32. public void onClick(View v) {
  33. // TODO Auto-generated method stub
  34. try {
  35. DatagramSocket ds=new DatagramSocket(5678);
  36. InetAddress serverAddr= InetAddress.getByName("192.168.0.115");//绑定要通信的服务器端IP
  37. byte[] data=tv.getText().toString().getBytes();
  38. DatagramPacket packet=new DatagramPacket(data,data.length,serverAddr,5678);
  39. ds.send(packet);
  40. } catch (Exception e) {
  41. // TODO Auto-generated catch block
  42. e.printStackTrace();
  43. }
  44. }



  45. });
  46. }
  47. }
复制代码
经过测试在服务器端,如下图所示,可以接收到客户端发送过来的数据为:“hello”
现在附上实例源码,希望能对和我一样的初学者有帮助    SocketSample.rar (49.34 KB, 下载次数: 760) 


4.jpg (15.3 KB, 下载次数: 9)

4.jpg
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Java的客户登录和服务器GUI是指在Java编程语言中,实现一个客户登录功能和一个带有图形用户界面(GUI)的服务器客户登录是指在客户服务器之间建立连接,并通过输入用户名和密码等信息进行身份验证的过程。在实现客户登录功能时,可以使用Java Socket编程实现客户服务器之间的网络通信客户可以使用Java的Swing或JavaFX等库来创建一个用户界面,提供给用户输入账号、密码等信息并将其发送给服务器进行验证。客户还可以接收来自服务器的响应,例如登录成功或失败的消息,并相应地作出相应的处理。 服务器GUI是指在服务器实现一个带有图形用户界面的应用程序。服务器GUI的作用是方便管理员或系统运维人员管理服务器的运行状态、配置参数等。使用Java可以使用Swing或JavaFX等库来实现服务器GUI。服务器GUI可以显示服务器的运行状态,例如接收到的客户连接数、请求的处理情况等。管理员可以通过GUI界面对服务器进行一些操作,如启动、停止、重启等。同时,管理员还可以通过GUI界面输入和修改服务器的配置参数,例如监听口、最大连接数等。 综上所述,Java的客户登录和服务器GUI是指在Java编程语言中,通过使用Socket编程和Swing或JavaFX等库,实现一个客户登录功能和一个带有图形用户界面的服务器应用程序。这样,用户可以通过客户登录服务器并进行身份验证,同时管理员可以通过服务器GUI界面管理服务器的运行状态和配置参数。 ### 回答2: Java客户登录和服务器GUI的实现方式可以按照以下步骤进行: 1. 客户登录功能:客户通过使用Java的Socket类与服务器建立连接。客户GUI界面可以使用Java的Swing或JavaFX等图形库进行设计。用户在登录界面输入用户名和密码后,客户将这些信息发送给服务器进行验证。服务器验证通过后,客户可以进入主界面,并显示相应的信息。 2. 服务器GUI:服务器也可以使用Java的Swing或JavaFX等图形库来实现GUI界面。服务器GUI界面可以展示当前连接的客户数量、日志信息等内容。通过服务器的GUI界面,可以监控和管理客户的连接和状态。 总的来说,Java客户登录和服务器GUI的实现涉及到以下关键步骤: - 客户服务器的网络通信,可以使用Java Socket类进行实现。 - 客户GUI的设计,可以使用Swing或JavaFX等图形库进行实现,并提供用户输入和显示验证结果功能。 - 服务器GUI的设计,可以使用Swing或JavaFX等图形库进行实现,并提供管理和监控客户连接情况的功能。 需要注意的是,Java客户登录和服务器GUI的实现还需要考虑安全性和数据传输的加密等问题,以确保用户信息的安全性。 ### 回答3: Java客户登录和服务器GUI是指在Java编程语言中,实现客户登录和服务器管理界面的功能。 在Java客户登录中,可以使用Swing或JavaFX等图形用户界面框架创建登录界面。用户可以在该界面中输入用户名和密码等登录信息,并通过点击登录按钮将信息发送到服务器进行验证。服务器可以使用Socket进行监听并接收客户发送的登录请求,然后进行验证。如果验证成功,服务器会向客户发送登录成功的消息,客户接收到消息后可以跳转到主界面或进行其他操作。如果验证失败,则服务器会向客户发送登录失败的消息,客户接收到消息后可以提示用户重新输入登录信息或进行其他处理。 在Java服务器GUI中,可以使用Swing或JavaFX等图形用户界面框架创建服务器管理界面。该界面可以显示当前连接到服务器客户信息,包括IP地址、用户名等。服务器可以使用Socket进行监听并接收客户连接请求,每当有新的客户连接时,服务器会将该客户的相关信息添加到管理界面中显示。管理界面还可以提供一些功能,如关闭特定客户的连接、发送广播消息等。通过服务器GUI,管理员可以方便地进行服务器的管理和操作。 总结来说,Java客户登录和服务器GUI是通过Java的图形用户界面框架实现的,通过客户登录实现用户认证和授权功能,而服务器GUI则提供了对连接到服务器客户进行管理和操作的界面。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值