社区
Java SE
帖子详情
关于用一个socket多次对话的问题
lonwin
2006-10-24 10:56:09
我写了个GUI的服务器端和客户端,服务器继承Thread类,每次new 一个线程出来,问题是每次对话时都时临时建立socket,inputstream,outputstream,这样会不会浪费资源,能不能从头到尾,就用一开始建立的一个socket,inputstream,outputstream,直到关闭程序再调用 close()?
如果行的话,请高手务必给出代码,感激不尽!
...全文
218
6
打赏
收藏
关于用一个socket多次对话的问题
我写了个GUI的服务器端和客户端,服务器继承Thread类,每次new 一个线程出来,问题是每次对话时都时临时建立socket,inputstream,outputstream,这样会不会浪费资源,能不能从头到尾,就用一开始建立的一个socket,inputstream,outputstream,直到关闭程序再调用 close()? 如果行的话,请高手务必给出代码,感激不尽!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
lonwin
2006-10-24
打赏
举报
回复
///////////////////////////这是client gui程序////////////////////////
import java.net.*;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
public class socketclient extends JFrame implements ActionListener
{
TextArea sysInfo=new TextArea(" ");
Label lbl_txt=new Label("TEXT:");
TextField txt_text =new TextField(30);
JButton btn_send=new JButton("send");
JScrollPane jp=new JScrollPane(sysInfo);
JPanel p=new JPanel();
boolean isConn=false;
Socket client = null;
InputStream netin=null;
PrintWriter out=null;
public socketclient()
{
setSize(430,320);
btn_send.addActionListener(this);
p.setLayout(new FlowLayout(FlowLayout.LEFT));
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e){
setTitle("正在退出...");
System.exit(0);
}
});
getContentPane().add(p,"North");
getContentPane().add(jp,"Center");
p.add(lbl_txt);
p.add(txt_text);
p.add(btn_send);
show();
connect();
}
public void actionPerformed(ActionEvent e)
{
Object eventsource=e.getSource();
if(eventsource==btn_send)
{
send();
}
}
public static void main(String[] args)
{
new socketclient();
}
public void connect()
{
try{
client = new Socket("localhost",65530);
netin=client.getInputStream();
out=new PrintWriter(client.getOutputStream(),true);
}
catch(Exception e)
{
e.printStackTrace();
}
}
public void send()
{
try
{
out.println(txt_text.getText());
sysInfo.append("\r\n我说:"+txt_text.getText());
byte[] buf=new byte[100];
int len=netin.read(buf);
sysInfo.append("\r\nServer:"+new String(buf,0,len));
}
catch(Exception e)
{
e.printStackTrace();
}
}
public void closeconn()
{
try{
out.close();
netin.close();
client.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
lonwin
2006-10-24
打赏
举报
回复
//这是server端程序
import java.net.*;
import java.io.*;
import java.util.*;
public class socketserver implements Runnable{
private Socket client=null;
private BufferedReader netin=null;
private PrintWriter out=null;
public socketserver(Socket s){
client=s;
try{
netin=new BufferedReader(new InputStreamReader(client.getInputStream()));
out=new PrintWriter(client.getOutputStream());
}
catch(Exception e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
System.out.println("socket server is listening....");
ServerSocket server=null;
try
{
server=new ServerSocket(65530);
while(true)
{
Socket user=server.accept();
new Thread(new socketserver(user)).start();
}
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
try
{
server.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
public void run()
{
try
{
// System.out.println(Thread.currentThread().getName()+"working....");
while(true)
{
String tmpstr=netin.readLine();
System.out.println(client.getInetAddress()+"@"+client.getPort()+" Says:"+tmpstr);
if(tmpstr.equalsIgnoreCase("bye"))
{
out.close();
netin.close();
client.close();
return;
}
else out.println(tmpstr);
}
}
catch(Exception e)
{
e.printStackTrace();
try{out.close();
netin.close();
client.close();}
catch(Exception ee)
{
}
}
}
}
yanhan0615
2006-10-24
打赏
举报
回复
1.服务器把所有没有断开的连接做保存,使用多线程甚至是线程池;
2.客户端使用线程,在需要的情况下一直保持连接;
3.自定义一些协议和包头,例如关闭连接,发送信息等
英有尽有
2006-10-24
打赏
举报
回复
socket可以一直连着的
zzhzzh204553
2006-10-24
打赏
举报
回复
socket对象可以用一个变量保存啊.
zgysc
2006-10-24
打赏
举报
回复
帮你顶!
myInternet_3.rar
图形界面编程,利用
socket
和UDP/TCP编写,客户端和服务端程序可以进行
多次
对话
。实现了一对一
多次
对话
,里面运用了网络编程和多线程编程。
socket
_programming:这是
一个
简单的任务,实际上是通过TCP和UDP实现套接字编程的
socket
_programming:这是
一个
简单的任务,实际上是通过TCP和UDP实现套接字编程的
java课程设计报告-聊天室
java课程设计报告-聊天室,1、 图形界面编程,利用TCP的
socket
或者UDP编写,客户端和服务器端程序可以进行
多次
对话
。 2、 利用程序,访问
一个
网站,将指定的
一个
页面保存到本地
java源码包---java 源码 大量 实例
在有状态SessionBean中,用累加器,以
对话
状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每
一个
EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java
Socket
聊天...
java源码包2
在有状态SessionBean中,用累加器,以
对话
状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每
一个
EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java
Socket
聊天...
Java SE
62,614
社区成员
307,326
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章