Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java套接字编程中的流块_Java_Sockets_Network Programming - Fatal编程技术网

java套接字编程中的流块

java套接字编程中的流块,java,sockets,network-programming,Java,Sockets,Network Programming,在我的代码的一部分中,我从服务器写入socket并等待从客户机读取它,但客户机从未读取我从服务器和程序块发送的这个整数。 我进行了测试,发现服务器发送了整数,但我找不到客户端为什么不接收整数。 我在这里写代码。请注意,我对代码中有关将“mysize”变量从服务器传输到客户机的重要部分进行了注释,如“//***//” 多谢各位 我的服务器部件(重要的一行是第107行): 导入java.awt.List; 导入java.awt.im.spi.InputMethod; 导入java.io.DataIn

在我的代码的一部分中,我从服务器写入socket并等待从客户机读取它,但客户机从未读取我从服务器和程序块发送的这个整数。 我进行了测试,发现服务器发送了整数,但我找不到客户端为什么不接收整数。 我在这里写代码。请注意,我对代码中有关将“mysize”变量从服务器传输到客户机的重要部分进行了注释,如“//***//”

多谢各位

我的服务器部件(重要的一行是第107行):

导入java.awt.List;
导入java.awt.im.spi.InputMethod;
导入java.io.DataInputStream;
导入java.io.DataOutputStream;
导入java.io.IOException;
导入java.io.ObjectInputStream;
导入java.io.ObjectOutputStream;
导入java.io.OutputStream;
导入java.io.PrintStream;
导入java.net.InetAddress;
导入java.net.ServerSocket;
导入java.net.Socket;
导入java.net.SocketAddress;
导入java.net.UnknownHostException;
导入java.util.ArrayList;
导入javax.swing.JOptionPane;
/**
* 
*/
/**
*@作者新浪
*
*/
公共类BoxServer{
服务器套接字服务器套接字;
静态ThreadHandler t[]=新ThreadHandler[1000000];
静态int size=0;
静态ArrayList messagebox=新建ArrayList();
公共静态void main(字符串[]args){
ServerSocket ServerSocket=null;
试一试{
serverSocket=新的serverSocket(79);
}捕获(IOE1异常){
//TODO自动生成的捕捉块
系统出口(0);
e1.printStackTrace();
}
while(true)
{
试一试{
//InetAddress InetAddress=InetAddress.getLocalHost();
//系统输出打印LN(inetadress);
//System.out.println(inetAddress.getHostName());
//System.out.println(inetAddress.getHostAddress());
Socket=serverSocket.accept();
if(套接字==null)
{
System.out.println(“空”);
}
t[size]=新的螺纹处理器(套筒,尺寸);
大小++;
t[size-1].start();
}
捕获(未知后异常e){
//System.out.println(“salam s”);
系统出口(0);
//System.out.println(e.getMessage());
}
捕获(IOE异常){
系统出口(0);
//System.out.println(“再见”);
//System.out.println(e.getMessage());
}
}
}
}
类ThreadHandler扩展线程{
私密性;
套接字mySocket;
目标输入流输入;
对象输出流输出;
公共线程处理程序(套接字s,整数大小)
{
this.mySocket=s;
this.mysize=大小;
System.out.println(“Actives:+Thread.activeCount());
}
公开募捐
{
试一试{
inp=newobjectinputstream(mySocket.getInputStream());
outp=newObjectOutputStream(mySocket.getOutputStream());
System.out.println(“yaaaani minvise?:|”);
输出写入(mysize)//*********//
System.out.println(mysize+“neveshte shod dar系统”);
System.out.println(“乌马德-雅尼-内维斯特的年龄”);
}捕获(IOE1异常){
//TODO自动生成的捕捉块
系统出口(0);
e1.printStackTrace();
}
while(true)
{
//System.out.println(“线程运行”);
//System.out.println(mySocket.getLocalPort());
//System.out.println(mySocket.getLocalAddress());
试一试{
//System.out.println(“我的套接字:+mySocket.getOutputStream());
//System.out.println(mySocket.isConnected());
//System.out.println(inp.available());
//System.out.println(“inp=“+inp”);
if(mySocket.isConnected())
{
Message mess=(Message)inp.readObject();
//System.out.print(“mess is==>”;
//System.out.println(mess+“”);
//JOptionPane x=新的JOptionPane();
//x.setVisible(真);
//x.setMessage(mess);
//系统输出打印项次(“dsd”);
//System.out.println(“mess:+mess”);
if(mess.getReceiver().equals(“系统使用:代码=1”))
{
//System.out.println(“yaroo payamasho mikhad”);
字符串senderOfSystemUse=mess.getSender();
ArrayList tempInbox=新建ArrayList();

对于(int i=0;i在调用writeInt()之后调用flush())。您还应该在ObjectInputStream之前构造ObjectOutputStream。

请在每个句子的开头使用shift键,并输入单词I和专有名称。阅读所有小写字母就像听某人咕哝。提示:要获得更多更快的答案,请提供一些而不是400行代码。-1此问题显示零效率rt将问题归结为几行相关的代码。这里不欢迎粘贴大量代码。谢谢。现在可以了,但之前我没有使用flush通过套接字进行对象传输。flush仅用于基本类型或其他东西吗?@Sina正确。
ObjectOutputStream
运行一个内部缓冲区,该缓冲区在之后被刷新
writeObject()
但不是在编写原语之后。
import java.awt.List;
import java.awt.im.spi.InputMethod;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;

import javax.swing.JOptionPane;

/**
 * 
 */

/**
 * @author Sina
 *
 */
public class BoxServer {

    ServerSocket serversocket;
    static ThreadHandler t[]=new ThreadHandler[1000000];
    static int size=0;
    static ArrayList<Message> messagebox=new ArrayList<Message>();
    public static void main(String[] args) {

        ServerSocket serverSocket = null;
        try {
            serverSocket = new ServerSocket(79);
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            System.exit(0);
            e1.printStackTrace();
        }
        while(true)
        {

        try{




                //InetAddress inetadress=InetAddress.getLocalHost();
                //System.out.println(inetadress);
                //System.out.println(inetadress.getHostName());
                //System.out.println(inetadress.getHostAddress());
                Socket socket=serverSocket.accept();
                if(socket==null)
                {
                    System.out.println("null");
                }
                t[size]=new ThreadHandler(socket,size);
                size++;
                t[size-1].start();



        }
        catch(UnknownHostException e){
        //  System.out.println("salam s");
            System.exit(0);
         //System.out.println(e.getMessage());
        }
        catch (IOException e) {
            System.exit(0);
        //  System.out.println("bye s");
            //System.out.println(e.getMessage());
        }


        }

    }

}

class ThreadHandler extends Thread{

    private int mysize;
    Socket mySocket;
    ObjectInputStream inp;
    ObjectOutputStream outp;
    public ThreadHandler(Socket s,int size)
    {

        this.mySocket=s;
        this.mysize=size;
        System.out.println("Actives: " +Thread.activeCount());


    }
    public void run()
    {
        try {

            inp=new ObjectInputStream(mySocket.getInputStream());
            outp=new ObjectOutputStream(mySocket.getOutputStream());
            System.out.println("yaaaani minvise ? :|");
            outp.writeInt(mysize);//*********//
            System.out.println(mysize+"neveshte shod dar systam");
            System.out.println("age in umad yaaani nevesht");
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            System.exit(0);
            e1.printStackTrace();
        }

        while(true)
        {
        //System.out.println("thread run");
        //System.out.println(mySocket.getLocalPort());
        //System.out.println(mySocket.getLocalAddress());

        try {
        //  System.out.println("my socket:"+mySocket.getOutputStream());
        //  System.out.println(mySocket.isConnected());
        //  System.out.println(inp.available());
        //  System.out.println("inp = "+inp);

            if(mySocket.isConnected())
            {


            Message mess=(Message)inp.readObject();

        //  System.out.print("mess is ====>");
        //  System.out.println(mess+"        ");
        //  JOptionPane x=new JOptionPane();
        //  x.setVisible(true);
        //  x.setMessage(mess);
            //System.out.println("dsd");
            //System.out.println("mess: "+mess);

            if(mess.getReceiver().equals("system-use:code=1"))
            {
            //  System.out.println("yaroo payamasho mikhad");
                String senderOfSystemUse=mess.getSender();
                ArrayList<Message> tempInbox=new ArrayList<Message>();
                for(int i=0;i<BoxServer.messagebox.size();i++)
                {
                    if(BoxServer.messagebox.get(i).getReceiver().equals(senderOfSystemUse) && BoxServer.messagebox.get(i).getDeliver()!=true)
                    {
                        tempInbox.add(BoxServer.messagebox.get(i));
                        BoxServer.messagebox.get(i).delivered();
                    }
                }

             //   System.out.println("قاعدتا باید نوشته باشه :دی");
                outp.writeObject(tempInbox);


            }
            else
            {
                //System.out.println("ye payam be sistem ezaf shod :"+mess);
                BoxServer.messagebox.add(mess);
            }

            }
            //mySocket.close();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            //System.out.println("bug dar thread");
            System.exit(0);
            //e.printStackTrace();
            try {
                mySocket.close();
            } catch (IOException e1) {
                // TODO Auto-generated catch block
                System.exit(0);
            //  e1.printStackTrace();
            }

        }

         }

    }
}
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.LayoutManager;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.ArrayList;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.ScrollPaneConstants;
import javax.swing.SwingUtilities;

public class Main extends JFrame{

    /**
     * @param args
     */



    public String userTemp;
    public Main()
    {








        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        final JPanel jpanel=new JPanel(null);
        this.getContentPane().add(jpanel);
        JButton inbox=new JButton("INBOX");
        jpanel.add(inbox);
        inbox.setBounds(0,0,100,30);
        inbox.setToolTipText("for see your inbox messages click!");
        this.setVisible(true);
        this.setSize(400,400);
        JLabel receiver=new JLabel("receiver : ");
        jpanel.add(receiver);
        receiver.setBounds(0,60,100,30);
        final JTextField receiverText=new JTextField();
        jpanel.add(receiverText);
        receiverText.setBounds(100,60,100,30);
        receiverText.setBackground(Color.magenta);
        JLabel message=new JLabel("message : ");
        jpanel.add(message);
        message.setBounds(0, 90, 100, 30);
        final JTextArea messageText=new JTextArea();
        jpanel.add(messageText);
        messageText.setBounds(100,90,200,30);
        messageText.setBackground(Color.magenta);
        ImageIcon x=new ImageIcon("send.png");
        JButton send=new JButton(x);
        jpanel.add(send);
        send.setBounds(50,130,64,64);
        final JTextField username=new JTextField("username ...");
        JButton signup=new JButton("new user");
        signup.setVisible(false);
        JButton login=new JButton("login Or create");
        jpanel.add(login);
        jpanel.add(signup);
        jpanel.add(username);
        username.setBounds(10,240,100,40);
        login.setBounds(10, 290, 200, 50);
        signup.setBounds(110, 290, 100, 50);
        //kpanel
        final JPanel kpanel=new JPanel(new GridLayout(0, 1));
        kpanel.setBackground(Color.green);
        ImageIcon t=new ImageIcon("back.png");
        JButton back=new JButton(t);
        kpanel.add(back);
        back.setBounds(0,0,64,64);  
        kpanel.setVisible(false);
    //  this.getContentPane().add(kpanel);


        try {

            username.addFocusListener(new FocusListener() {

                @Override
                public void focusLost(FocusEvent arg0) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void focusGained(FocusEvent arg0) {
                    // TODO Auto-generated method stub
                    String teString=username.getText();
                    if(teString.equals("username ..."))
                    {
                        username.setText("");
                    }
                }
            });

            final Socket socket = new Socket("127.0.0.1",79); 
            final ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream());
            final ObjectInputStream in=new ObjectInputStream(socket.getInputStream());



                    try {
                        System.out.println("ghable khundane shomaarash");

                        int temp=in.readInt();//*********//

                        System.out.println("baade khundane shomaarash");

                        userTemp=""+temp;
                        login.setText(userTemp);

                        Thread timer=new Thread()
                        {
                            public void run()
                            {
                                while(true)
                                {
                                    Message temp=new Message();
                                    temp.setReceiver("system-use:code=1");
                                    temp.setSender(userTemp);

                                    try {
                                        out.writeObject(temp);
                                        sleep(60000);
                                    } 
                                    catch (InterruptedException e) {
                                        // TODO: handle exception
                                    //  e.printStackTrace();
                                    } catch (IOException e) {
                                        // TODO Auto-generated catch block
                                        //e.printStackTrace();
                                        try {
                                            socket.close();
                                        } catch (IOException e1) {
                                            // TODO Auto-generated catch block

                                        }
                                    }

                                }
                            }
                        };
                        timer.start();





                    } catch (Exception e1) {
                        // TODO Auto-generated catch block
                        try {
                            socket.close();
                        } catch (IOException e2) {
                            // TODO Auto-generated catch block
                    //      System.out.println("socket can not close");
                        }
                    //  e1.printStackTrace();
                    }












            Thread readerMessagesFromServer=new Thread(){

                public void run()
                {
                    while(true)
                    {

                        try {
                            ArrayList<Message> inboxReceived;

                            inboxReceived = (ArrayList<Message>) in.readObject();
                        //  System.out.println(userTemp+" received in its box :"+inboxReceived.size());
                            for(int i=0;i<inboxReceived.size();i++)
                            {
                                kpanel.add(new JLabel(inboxReceived.get(i).toString()));


                            }

                        } catch (IOException e) {
                            // TODO Auto-generated catch block

                            try {

                                socket.close();
                                in.close();
                                out.close();

                            } catch (IOException e1) {
                                // TODO Auto-generated catch block
                                e1.printStackTrace();
                            }

                            e.printStackTrace();
                        } catch (ClassNotFoundException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }

                    }
                }
            };

            readerMessagesFromServer.start();

            send.addActionListener(new ActionListener() {

                @Override
                public void actionPerformed(ActionEvent e) {

                    String rec=receiverText.getText();
                    String mes=messageText.getText();
                    String snd=userTemp;
                    Message obj=new Message();
                    obj.setReceiver(rec);
                    obj.setSender(snd);
                    obj.setText(mes);

                    try {
                        out.writeObject(obj);
                    } catch (IOException e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                    }

                }
            });

        } catch (UnknownHostException e2) {
            // TODO Auto-generated catch block
            e2.printStackTrace();
        } catch (IOException e2) {
            // TODO Auto-generated catch block
            e2.printStackTrace();
        }



        inbox.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent arg0) {
                jpanel.setVisible(false);
                kpanel.setVisible(true);
                Main.this.getContentPane().add(kpanel);


            }
        });

        back.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent arg0) {
                kpanel.setVisible(false);
                Main.this.getContentPane().remove(kpanel);
                jpanel.setVisible(true);

            }
        });




    }
    public static void main(String[] args) {



        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                Main ex = new Main();
                ex.setVisible(true);
            }
        });


    }

}