:oops: 要求,服务器端不停地发送数据给客户端;客户端通过键盘输入的某个命令把服务器端的数据存到本地二进制文件(非文本文件)(最好能自己设置服务器的IP和端口) ,在通过其他某个命令停止上述操作;服务器端可以没有界面,客户端必须有界面;要用多线程实现,不要单线程的 :oops:
[b]问题补充:[/b]
小弟我是刚接触socket,很菜的。还希望高手们能提供下代码啊!
[b]问题补充:[/b]
我参照各位大虾的信息,写了一个程序。
服务器连续发送数据给客户端,可客户端还是无法连续将数据写入文件啊。
我的代码在我的博客里
http://mxx123.iteye.com/blog/410109
希望大家能指点一下小弟啊
附件里也是代码。
这个是我以前学java这部分的时候的一些代码,现在贴出来希望对你有点帮助,稍微改下应该就能满足你的要求了,如下:
client.java
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.net.*;
import java.io.*;
class Client extends JFrame implements ActionListener,Runnable
{
JLabel label = new JLabel("Please input data:");
JTextField tf = new JTextField(20);
JButton send = new JButton("Send");
JTextArea area = new JTextArea(30,100);
JScrollPane pane = new JScrollPane(area);
Socket socket;
BufferedReader br;
PrintWriter bw;
static String name;
public Client()
{
super(name);
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
bw.println("Window");
System.exit(0);
}
});
send.addActionListener(this);
Container c = getContentPane();
JPanel panel = new JPanel();
panel.setLayout(new FlowLayout());
panel.add(label);panel.add(tf);panel.add(send);
c.add(panel,"North");
c.add(pane);
setSize(600,400);
setVisible(true);
init();
}
void init()
{
try
{
socket = new Socket("127.0.0.1",6666);
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
bw = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()),true);
bw.println(name);
Thread thread = new Thread(this);
thread.start();
}catch(Exception e)
{
e.printStackTrace();
}
}
public void run()
{
while(true)
{
try
{
String data = br.readLine();
if(data.equals("Server Close"))
{
System.exit(0);
}
JScrollBar jb = pane.getVerticalScrollBar();
jb.setValue(jb.getMaximum());// 拉到最后一行
area.append(data+"\n");
}catch(Exception e)
{
e.printStackTrace();
}
}
}
public void actionPerformed(ActionEvent e)
{
String data = tf.getText();
try
{
bw.println(data);
}catch(Exception a)
{
a.printStackTrace();
}
}
public static void main(String[] args)
{
if(args.length!=1)
{
System.out.println("Usage:java Client xiaowang");
System.exit(0);
}
name = args[0];
new Client();
}
}
server.java
import javax.swing.*;
import java.net.*;
import java.io.*;
import java.util.*;
import java.awt.event.*;
class Server extends JFrame
{
JTextArea area = new JTextArea();
JScrollPane pane = new JScrollPane(area);
Vector vector = new Vector();
public Server()
{
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
for(int i=0;i<vector.size();i++)
{
try
{
PrintWriter pw = (PrintWriter)vector.get(i);
pw.println("Server Close");
}catch(Exception a){}
}
System.exit(0);
}
});
getContentPane().add(pane);
setSize(300,400);
setVisible(true);
init();
}
void init()
{
try
{
ServerSocket server = new ServerSocket(6666);
while(true)
{
Socket socket = server.accept();
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter pw = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()),true);
vector.add(pw);
Chat c = new Chat(br);
c.start();
}
}catch(Exception e)
{
e.printStackTrace();
}
}
class Chat extends Thread
{
BufferedReader br;
String name;
public Chat(BufferedReader br)
{
this.br = br;
}
public void run()
{
try
{
name = br.readLine();
}catch(Exception a)
{
a.printStackTrace();
}
while(true)
{
try
{
String data = br.readLine();
if(data.equals("Window"))
{
break;
}
for(int i=0;i<vector.size();i++)
{
PrintWriter writer = (PrintWriter)vector.get(i);
writer.println(name+" : "+data);
}
area.append(name+" : "+data+"\n");
}catch(Exception e)
{
e.printStackTrace();
}
}
}
}
public static void main(String[] args)
{
new Server();
}
}
建议你自己多想想先,可以参考聊天室程序
http://java.chinaitlab.com/net/743578.html
只要实现这个功能,用VB,C#或者java的写个桌面引用就可以了,这样更容易实现。
Java Socket简单聊天和文件传输工具
http://chenkaijie.blog.51cto.com/159108/65303