我是Java新手,正在学习如何通过Socket()类发送消息。
我正在试着理解两个简单的聊天程序之间是如何发送和接收字符串的。我在网上找到了很多关于TCP/UDP聊天客户端和聊天服务器的例子。
但我仍然对缓冲数据和字符串感到困惑。
在我的代码中,我添加了3个字段(field1、field2、area),以及一个带有事件侦听器的提交按钮。下面是代码的一部分,显示了我如何附加侦听器和它实例化的类。
......more code above this
button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
new SendRequest();
}
});
public class SendRequest{
SendRequest(){
try{
String dip = field1.getText(); // ip address
String port = field2.getText(); // port num
int pnum = Integer.parseInt(port);
String mess = area.getText(); // large text box
Socket skt = new Socket(dip, pnum);
/* kinda not sure about this part, with strings */
}
catch(IOException io){
System.out.println("error? " + io.getMessage());
}
}
}我在网上看到了这么多例子,现在我有点迷惑了。
在实例化new Socket()之后,发送多行文本的好方法是什么?
发布于 2012-12-05 09:16:29
在“稍微不确定的部分”中,使用套接字中的OutputStream创建一个PrintWriter,然后在文本区域的"mess“字符串上调用PrintWriter的print方法来打印消息。
这会将消息字符串放入输出流缓冲区,但直到您调用PrintWriters刷新方法时才会发送。
最后,关闭PrintWriter。
文本应多行发送,因为当您按enter时,文本字符串将包含"\r\n“。
例如:
PrintWriter output = new PrintWriter(skt.getOutputStream());
output.print(mess);
output.flush();
output.close();发布于 2012-12-05 09:14:09
连接套接字并获得其输出流(通过socket.getOutputStream())后,写入套接字与写入任何输出流(如文件)没有任何不同。编写多行文本的方式应与将其写入文件的方式完全相同。
如何发送多行文本-似乎最好的方法是在套接字的输出流上构造一个ObjectOutputStream,并使用它。例如:
Socket socket = new Socket(...);
OutputStream os = socket.getOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(os);然后编写你的对象(一个字符串,一个字符串数组,或者一个List,等等):
oos.writeObject(mess);只要mess的类是Serializable (如果mess是对象的集合,并且这些对象也是Serializable),这就可以工作。您可以使用ObjectInputStream和readObject从另一端读取对象。
发布于 2012-12-05 09:15:55
有几种写入数据的方法。例如,我喜欢序列化一个类,并通过ObjectOutputStream发送该类的一个实例。但是由于您只发送一个字符串,所以BufferedWriter可能更容易处理。
代码:
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(skt.getOutputStream(),"UTF-8")); //optional encoding
writer.write(mess+"\r\n");没有比这更令人困惑的了,"\r\n“是为了在接收端更容易地处理最后一行。
https://stackoverflow.com/questions/13714565
复制相似问题