Java通过TCP发送字符串或段落
我是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());
}
}
}
我在网上看到了这么多的例子,现在我有点困惑了
在实例化新的Socket()之后,发送多行文本的合适方式是什么
# 1 楼答案
一旦连接套接字并获得其输出流(通过
socket.getOutputStream()
),写入套接字与写入任何输出流(如文件)没有任何区别。您应该以与写入文件完全相同的方式写入多行文本如何发送多行文本——似乎最好的方法是在套接字的输出流上构造一个
ObjectOutputStream
,然后使用它。例如:然后编写对象(字符串、字符串数组或
List
等等):只要
mess
的类是Serializable
(如果mess
是对象的集合,并且这些对象也是Serializable
),这将起作用。您可以使用ObjectInputStream
和readObject
从另一端读取对象# 2 楼答案
有几种写入数据的方法。例如,我喜欢序列化一个类并通过ObjectOutputStream发送该类的实例。但由于您只发送字符串,因此BufferedWriter可能更容易处理
代码:
没有比这更令人困惑的了,“\r\n”用于更容易地处理接收端的最后一行
# 3 楼答案
在“有点不确定部分”中,使用套接字中的OutputStream创建一个PrintWriter, 然后,要打印消息,请在文本区域的“mess”字符串上调用PrintWriter的print方法
这会将消息字符串放入输出流缓冲区,但在调用PrintWriters flush方法之前不会发送
最后关闭PrintWriter
文本应以多行方式发送,因为按enter键时textareas字符串将包含“\r\n”
例如