这两个简单的Socket,望高手指教,我都弄了一个早上了

问题描述

服务端程序是这样的:importjava.net.*;importjava.awt.*;importjava.awt.event.*;importjava.io.*;importjavax.swing.*;publicclassserverTwoextendsJFrameimplementsActionListener,Runnable{//声明数据通信类对象和窗体组件对象InetAddressaddr;ServerSocketse;Socketso;DataInputStreamin;DataOutputStreamout;JButtonbtn;JTextFieldjtf;JTextAreajta;JScrollPanejsp;serverTwo()throwsException{//构建可视化窗体btn=newJButton("发送");jtf=newJTextField(15);btn.addActionListener(this);this.setLayout(newBorderLayout());jta=newJTextArea();JPaneljp=newJPanel();jp.add(btn);jp.add(jtf);//创建滚动条面板jsp=newJScrollPane();jsp.setViewportView(jta);this.setTitle("Server");this.add(BorderLayout.SOUTH,jp);this.add(jsp);this.setSize(300,200);this.setVisible(true);//创建ServerSocket,并开始监听addr=InetAddress.getByName("aci");se=newServerSocket(135);System.out.println("服务器启动...");so=se.accept();System.out.println("有客户端连接...");//创建数据流in=newDataInputStream(so.getInputStream());out=newDataOutputStream(so.getOutputStream());}publicvoidrun(){//接收客户端的消息try{while(true){jta.append("client:"+in.readUTF());jta.append("n");}}catch(Exceptionex){System.out.println(ex.getMessage());}}publicstaticvoidmain(String[]args)throwsException{//将当前类作为线程启动Threadt=newThread(newserverTwo());t.start();}publicvoidactionPerformed(ActionEvente){try{//向客户端发送消息out.writeUTF(jtf.getText());out.flush();//发送一次消息,在当前窗体也显示自身的消息jta.append("me:"+jtf.getText());jta.append("n");}catch(Exceptionex){System.out.println(ex.getMessage());}}}客户端是这样的:importjava.net.*;importjava.io.*;importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassclientTwoextendsJFrameimplementsActionListener,Runnable{Socketso;DataInputStreamin;DataOutputStreamout;JButtonbtn;JTextFieldjtf;JTextAreajta;JScrollPanejsp;clientTwo()throwsException{btn=newJButton("发送");jtf=newJTextField(15);btn.addActionListener(this);this.setLayout(newBorderLayout());jta=newJTextArea();JPaneljp=newJPanel();jp.add(btn);jp.add(jtf);jsp=newJScrollPane();jsp.setViewportView(jta);this.setTitle("Client");this.add(BorderLayout.SOUTH,jp);this.add(jsp);this.setSize(300,200);this.setVisible(true);//创建客户端Socket并创建输入输出流so=newSocket("localhost",135);in=newDataInputStream(so.getInputStream());out=newDataOutputStream(so.getOutputStream());}publicvoidrun(){//接收服务器返回的消息try{while(true){jta.append("server:"+in.readUTF());jta.append("n");}}catch(Exceptionex){System.out.println(ex.getMessage());}}publicstaticvoidmain(String[]args)throwsException{Threadt=newThread(newclientTwo());t.start();}publicvoidactionPerformed(ActionEvente){try{//向服务器发送消息out.writeUTF(jtf.getText());out.flush();jta.append("me:"+jtf.getText());jta.append("n");}catch(Exceptionex){System.out.println(ex.getMessage());}}}运行时,客户端可以,服务端运行时,不能在jta中显示jtf中输入的信息,控制台只是输出一个null

解决方案

解决方案二:
把addr=InetAddress.getByName("aci");这行代码给注释掉吧,然后就可以了,我已经试过了
解决方案三:
//创建数据流in=newDataInputStream(so.getInputStream());out=newDataOutputStream(so.getOutputStream());server端的数据流不是这样创建的

时间: 2024-10-30 22:44:34

这两个简单的Socket,望高手指教,我都弄了一个早上了的相关文章

java-大学的两个简单的算法问题

问题描述 大学的两个简单的算法问题 我们的课设任务,一个是递归替换问题,还有一个是二叉排序树问题,用C语言或者Java都行. 解决方案 两个简单数学问题的精巧算法两个简单数学问题的精巧算法韩信点兵问题的简单算法(downmoon) 解决方案二: 递归替换问题:编写程序,扩展C/C++源文件中的#include指令(以递归的形式),请以文件名的内容替换如下面的代码行

用tcpclient或者socket获取COOKIE 代码如何写??高手指教

问题描述 用tcpclient或者socket获取COOKIE代码如何写??高手指教 解决方案 解决方案二:用这两个获得Cookie----貌似--因为Http协议是在TCP协议基础上实现的,所以如果用这两个类去获得Cookie的话只能手动解析HttpHeader我根据协议猜的解决方案三:用tcpclient或socket当然可以去取得cookie数据问题是,你得去分析socket通讯过程中的数据,当从流中读取到Set-Cookie这个字符串时,就可以取得cookie的数据了不过,有封闭好的ht

ASP的两个简单的检测外部提交函数

本文例举了ASP的两个简单的检测外部提交函数的例子,第一个函数是ChkPost(),它可以检测用户当前所在服务器名是否存在于来源页面,第二个函数是PostCheck(),它可以通过很简单的检测,看看提交是否为POST方式. 函数ChkPost() 检测用户当前所在服务器名是否存在于来源页面 代码如下: Function ChkPost()   dim server_v1,server_v2 chkpost=False server_v1=Cstr(Request.ServerVariables(

防范QQ密码被破解的两个简单方法

腾讯QQ是普及面最高的一种聊天工具.QQ密码在网络中被盗走的情况时有发生,那么对于这些种种令人厌恶的远程破解方式,我们究竟应该如何进行防范呢?下面就给大家介绍两个简单防范招术. 1.防范在线密码破解 远程在线破解QQ密码,其原理仍然是采用穷举技术对键盘所有可能的输入进行猜测,惟一不同之处在于它可以自动和腾讯服务器进行密码核对.所以,对它的防范一要靠腾讯公司对服务器进行防止在线破解的安全设置,二就是用户要设置复杂的密码,这样就可以有效地防止密码在线盗窃了. 2.防范木马破解 其实我们的电脑被人种木

用JQuery实现全选与取消的两种简单方法

 本篇文章主要是对JQuery实现全选与取消的两种简单方法进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助 用JQUERY实现全选和取消全选,没有js那么繁琐,而且支持更多浏览器.  代码如下: <mce:script type="text/javascript"><!--   $(function() {       $("#checkall").click(function() {           $("input[@na

Java之递归求和的两种简单方法(推荐)_java

方法一: package com.smbea.demo; public class Student { private int sum = 0; /** * 递归求和 * @param num */ public void sum(int num) { this.sum += num--; if(0 < num){ sum(num); } else { System.out.println("sum = " + sum); } } } 方法二: package com.smbea

格式-markdown编辑时,如何使每段文字开头空两格啊。。求高手指导

问题描述 markdown编辑时,如何使每段文字开头空两格啊..求高手指导 Markdown编辑时不会控制文字格式,每段开头不会空格,. 解决方案 http://zhidao.baidu.com/link?url=WDF2Ki79CJoRQOcATwotY-018-lUqUvwoZFmPc8e5juliPeb4AqKzHGBom9cPeo1w9YTqg0yoj5R6vE7URFbd8f1iB893FW6w7ZMUo59TOa

分享两段简单的JS代码防止SQL注入_javascript技巧

1.URL地址防注入: //过滤URL非法SQL字符 var sUrl=location.search.toLowerCase(); var sQuery=sUrl.substring(sUrl.indexOf("=")+1); re=/select|update|delete|truncate|join|union|exec|insert|drop|count|'|"|;|>|<|%/i; if(re.test(sQuery)) { alert("请勿

JavaScript数值千分位格式化的两种简单实现方法_javascript技巧

在对数值进行格式化的时候,一个常见的问题是按照千分位格式化,网上对这个问题已经有很多种解决方法了,还可以利用Array.prototype.reduce方法来实现千分位格式化. function formatNumber(num) { if (isNaN(num)) { throw new TypeError("num is not a number"); } var groups = (/([\-\+]?)(\d*)(\.\d+)?/g).exec("" + nu