从客户端往服务端发送消息的代码

客户端

public class TalkClient {

   

    public static void main(String[] args) {

        // Create application frame.

        ClientSend cs = new ClientSend();

        TalkClientFrame frame = new TalkClientFrame(cs);

       

        // Show frame

        frame.setVisible(true);

       

    }

}

//----------------------------------------------------

import java.net.*;

public class ClientSend {

private DatagramSocket ds_CSend;

private DatagramPacket dp_CSend;

public ClientSend(){

try{

    ds_CSend = new DatagramSocket(8080);

}

catch(Exception e){

e.printStackTrace();

}

}

public void Sended(byte[] buf,String sip){

try{

    dp_CSend = new DatagramPacket(buf,buf.length,InetAddress.getByName(sip),8888);

    ds_CSend.send(dp_CSend);

}

catch(Exception e){

e.printStackTrace();

}

}

}

///----------------------------------------------------------------

import java.awt.*;

import java.awt.event.*;

import java.net.*;

public class TalkClientFrame extends Frame {

     private List lst = new List(6);//存放对话内容

     private TextField tf_Data = new TextField(20);//存放发送内容       

     private TextField tf_ip = new TextField(15);//存放IP和PORT;

     private ClientSend cs;

  

     public TalkClientFrame(ClientSend cs) {

     this.cs = cs;

     tf_ip.setText("127.0.0.1");

        Panel p_Data = new Panel();//放置tf_Data,tf_ip的容器

 

     

//-----------------------布局-----------------------------------

        this.add(lst,"Center");

        this.add(p_Data,"South");

        p_Data.add(tf_ip,"West");

        p_Data.add(tf_Data,"East");

       

        tf_Data.addActionListener(new ActionListener(){

        public void actionPerformed(ActionEvent evt){

        //

       

        tf_Dataactionperformed(evt);

        }

        });

//----------------------------------------------------------------

        MenuBar menuBar = new MenuBar();

        Menu menuFile = new Menu();

        MenuItem menuFileExit = new MenuItem();

       

        menuFile.setLabel("文件(F)");

        menuFileExit.setLabel("退出(X)");

       

        // Add action listener.for the menu button

        menuFileExit.addActionListener

        (

            new ActionListener() {

                public void actionPerformed(ActionEvent e) {

                if (tf_Data.getText().length()>0)

                    TalkClientFrame.this.windowClosed();

                }

            }

        );

        menuFile.add(menuFileExit);

        menuBar.add(menuFile);

       

        setTitle("TalkClient");

        setMenuBar(menuBar);

        setSize(new Dimension(350, 400));

       

        // Add window listener.

        this.addWindowListener

        (

            new WindowAdapter() {

                public void windowClosing(WindowEvent e) {

                    TalkClientFrame.this.windowClosed();

                }

            }

        ); 

    }

   

    void tf_Dataactionperformed(ActionEvent e){

    byte[] buf = tf_Data.getText().getBytes();

    String strIp = tf_ip.getText();

    try{

        cs.Sended(buf,strIp); 

         

    }

    catch(Exception ex){

    ex.printStackTrace();

    }

    tf_Data.setText("");

    }

    /**

     * Shutdown procedure when run as an application.

     */

    protected void windowClosed() {

   

    // TODO: Check if it is safe to close the application

   

        // Exit application.

        System.exit(0);

    }

   

}

服务端

public class talkServer {

public static void main(String[] args) {

// TODO: Add your code here

talkRecv tR = new talkRecv();

tR.Recved();

}

}

//------------------------------------------------

import java.net.*;

public class talkRecv {

private DatagramSocket ds_Recv;

private DatagramPacket dp_Recv;

public boolean b_stop=true;

public talkRecv(){

try{

    ds_Recv = new DatagramSocket(8888);//将8888端口作为接受端口

    byte[] buf = new byte[1024];

    dp_Recv = new DatagramPacket(buf,1024);

}

catch(Exception e){

e.printStackTrace();

}

}

public void Recved(){

while(b_stop){

try{

    ds_Recv.receive(dp_Recv);

    String str_info = new String(dp_Recv.getData(),0,dp_Recv.getLength());

    System.out.println("  ip:"+dp_Recv.getAddress().getHostAddress());    

    System.out.println("port:"+dp_Recv.getPort());

    System.out.println("data:"+str_info);

}

catch (Exception e){

e.printStackTrace();

}

}

}

}

//------------------------------------------------

这几个类都没怎么考虑对象的释放问题,这个问题希望那位大大能够关注一下,给小弟一点指点,小弟感激不禁

Author: happyjoe

haha

3 thoughts on “从客户端往服务端发送消息的代码”

  1. java有对象回收机制,内存对象的释放不用程序员操心。但是非内存对象的释放:如数据库连接,屏幕的图形等在sun的jvm中还是需要程序员处理的。

    我认为,如果对java的基本特性没有一个基本的掌握的话,急着写代码可能会走一些弯路。强烈推荐看看thinking in java。

  2. 蝙蝠兄的话确实很有道理,最近我也发现由于基础知识掌握不够,开始写一些代码感觉有点困难,所以我也在尽力掌握各种基础知识点.

    但是我个人认为,如果不多做些习作性开发的话,

    第一,学习没有成就感,这会让java学习变的为了学习而学习,感觉很枯燥无味

    第二,代码编写会很生疏,就算有强大了理论支持,也缺乏实际经验的积累

    呵呵,练武的不是有句老话吗"练功不练拳,犹如无舵船","练拳不练功,到老一场空";大概就是描述理论知识和实践经验这二者之间的关系吧

  3. 完全同意你的看法,我也是提倡在实战中进行学习。

    这也是我们学习日记的宗旨,目标式学习。

    上面菜单中的练功场项目也是基于你说的这种思想产生。

    再推荐两篇类似思想的文章吧:

    世界不会等待我们(转帖)

    第二篇文章有点长,后面摘录了一点:

    学习理论文章欣赏:信息时代如何学习[转帖]


    那么最后简单地讲一下,我们应当树立什么样的学习观念,在信息社会。第一条,学会享受学习,这几个字不一样,我们以前不这么说的呀,“学海无涯苦作舟”,苦作舟怎么是享受学习呢?苦作舟那是工业社会的逻辑,今天我们要换一种心态来学习,学习没有那么悲观,没有那么消极,没有那么可怕,谁不爱享受,谁都爱享受,但我们想起享受这两个字的时候,我们就很轻松了,所以用享受的心态来对待学习。第二学会快速学习,我一开始讲了,1991年毕业以后,我不会学习,为什么?因为我学习得从第一个字看到最后一个字,那么一大摞书,我怎么看,我得看多少年。也就是说那个时候,我只掌握了工业社会的精益求精的学习,而没有掌握面向信息社会快速的、粗糙的、蜻蜓点水的学习,在信息社会,你不掌握这套学习方法,你真的很难,所以我并不想否认那种学习精读,但是精读的同时,我们要学会快读,什么时候用精读,什么时候用快读,要看阅读的对象,有的对象需要我们精读,下工夫,一年读透一本书,有的时候很多书用不着那么读,一年可以读十本书,二十本书,五十本书,一百本书,不一样,要看学习的对象,也要看学习的目的,究竟为什么读,大量的阅读对于我们来说是特别重要的,在信息社会,因为信息太多了。第三条,学习既可以是循序渐进的,也可以是跳跃的,超前的。学校教育现在搞出了一套体系,我们必须循序渐进,这个体系有没有道理呢,这个体系为工业化服务很有道理,就掌握基本知识、基本技能来说很有道理,但是它是不够的,所以我说要两条腿走路。种学习方法并行,循序渐进的方法和非循序渐进的方法,跳跃的、超前的都可以来,什么都可以来。

      第四条,过去我们接受了一个理念,学习就是往脑子里不断地加东西,那么我们很乐于接受加法的学习,甚至是乘法的学习。那么我今天想告诉大家,因为在信息社会知识的半衰期很快,更新换代的速度很快,所以不要太留恋已经得到的东西,要清理清理家里的垃圾,不断地清除垃圾,要学会减法的学习,甚至是除法的学习,整个一块你都可以放掉,家里的藏书,隔一段时间就得清理一下,三、五年不看的书,除了那些工具书和很权威的书之外,就得换了。

    祝你成为一个成功的学习者。

Comments are closed.