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