首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java -通过TCP发送字符串或段落

Java -通过TCP发送字符串或段落
EN

Stack Overflow用户
提问于 2012-12-05 08:48:04
回答 3查看 8.5K关注 0票数 2

我是Java新手,正在学习如何通过Socket()类发送消息。

我正在试着理解两个简单的聊天程序之间是如何发送和接收字符串的。我在网上找到了很多关于TCP/UDP聊天客户端和聊天服务器的例子。

但我仍然对缓冲数据和字符串感到困惑。

在我的代码中,我添加了3个字段(field1、field2、area),以及一个带有事件侦听器的提交按钮。下面是代码的一部分,显示了我如何附加侦听器和它实例化的类。

代码语言:javascript
运行
复制
......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()之后,发送多行文本的好方法是什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-12-05 09:16:29

在“稍微不确定的部分”中,使用套接字中的OutputStream创建一个PrintWriter,然后在文本区域的"mess“字符串上调用PrintWriter的print方法来打印消息。

这会将消息字符串放入输出流缓冲区,但直到您调用PrintWriters刷新方法时才会发送。

最后,关闭PrintWriter。

文本应多行发送,因为当您按enter时,文本字符串将包含"\r\n“。

例如:

代码语言:javascript
运行
复制
PrintWriter output = new PrintWriter(skt.getOutputStream());
output.print(mess);
output.flush();
output.close();
票数 3
EN

Stack Overflow用户

发布于 2012-12-05 09:14:09

连接套接字并获得其输出流(通过socket.getOutputStream())后,写入套接字与写入任何输出流(如文件)没有任何不同。编写多行文本的方式应与将其写入文件的方式完全相同。

如何发送多行文本-似乎最好的方法是在套接字的输出流上构造一个ObjectOutputStream,并使用它。例如:

代码语言:javascript
运行
复制
Socket socket = new Socket(...);
OutputStream os = socket.getOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(os);

然后编写你的对象(一个字符串,一个字符串数组,或者一个List,等等):

代码语言:javascript
运行
复制
oos.writeObject(mess);

只要mess的类是Serializable (如果mess是对象的集合,并且这些对象也是Serializable),这就可以工作。您可以使用ObjectInputStreamreadObject从另一端读取对象。

票数 2
EN

Stack Overflow用户

发布于 2012-12-05 09:15:55

有几种写入数据的方法。例如,我喜欢序列化一个类,并通过ObjectOutputStream发送该类的一个实例。但是由于您只发送一个字符串,所以BufferedWriter可能更容易处理。

代码:

代码语言:javascript
运行
复制
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(skt.getOutputStream(),"UTF-8")); //optional encoding
writer.write(mess+"\r\n");

没有比这更令人困惑的了,"\r\n“是为了在接收端更容易地处理最后一行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13714565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档