问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

JAVA简单的socket程序

发布网友 发布时间:2022-04-22 04:49

我来回答

5个回答

热心网友 时间:2023-10-23 20:16

是可以的,客户端可以多次运行,前提是服务器端必需采用多线程,或是非阻塞的方式来监听客户端的连接请求。服务器端 思想,当客户端连接到来时,利用这个socket创建一个新的线程,并启动。当然,这只不过是最简单的性能最差的方法。你可以使用线程池在java.util.concurrent包中有线程池的实现类Executors你可以通过它的ExecutorService executorService=Executors.newFixedThreadPool(int threadSize);来创建一个线程池。当客户端连接到来时你可以创建一个线程类(handler)然后调用线程池的execute方法指行一个此线程。如:executorService.execute(new Handler(socket));。当然,如果你考虑性能,那么你最好使用nio(非阻塞)来处理,在java.nio.channels包下面有相应的类能处理nio。你可以去查看相关的资料。。

热心网友 时间:2023-10-23 20:16

CS001店面是开始发送信息的客户端~这个是我要参加比赛预测的题目,然后稍微改下就符合你的要求了~服务器端: import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.*;import javax.swing.JOptionPane; public class GUI与多线程 extends Frame implements ActionListener,ItemListener
{
Panel p1,p2,p3;
Checkbox c1,c2;
CheckboxGroup group;
TextArea text1 = null,text2 = null;
TextField tf = null;
Button send,exit;
CS001Thread th1 = null;
CS002Thread th2 = null;
int flag = 0;
public GUI与多线程(String title)
{
super(title);
p1 = new Panel();
group = new CheckboxGroup();
c1 = new Checkbox("CS001",group,false);
c2 = new Checkbox("CS002",group,false);
p1.add(c1);
p1.add(c2);
p1.add(new Label("销售信息",Label.RIGHT));
p2 = new Panel();
text1 = new TextArea(30,25);
text1.setEditable(false);
text2 = new TextArea(30,25);
text2.setEditable(false);
p2.add(text1);
p2.add(text2);

p3 = new Panel();
tf = new TextField(20);
send = new Button("发送");
exit = new Button("退出");
p3.add(new Label("输入信息"));
p3.add(tf);
p3.add(send);
p3.add(exit);

add(p1,"North");
add(p2);
add(p3,"South");

setSize(480, 300);
setVisible(true);

send.addActionListener(this);
exit.addActionListener(this);
c1.addItemListener(this);
c2.addItemListener(this);

th1 = new CS001Thread(text1);
th1.start(); th2 = new CS002Thread(text2);
th2.start();
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
dispose();
}
});
}
public static void main(String[] args)
{
new GUI与多线程("WF总公司办公室");
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource() == exit)
System.exit(0);
else
if(flag == 1)
{
try
{
th1.out.writeUTF("WF总公司办公室:" + tf.getText() + "\n");
text1.append("WF总公司办公室:" + tf.getText() + "\n");
tf.setText("");
}
catch (Exception e1)
{
text1.append("数据流通道没有建立\n");
}
}
else
if(flag == 2)
{
try
{
th2.out.writeUTF("WF总公司办公室:" + tf.getText() + "\n");
text2.append("WF总公司办公室:" + tf.getText() + "\n");
tf.setText("");
}
catch (IOException e1)
{
text2.append("数据流通道没有建立\n");
}
}
else
{
tf.setText("");
JOptionPane.showMessageDialog(this, "请选择CS001/CS002店面!");
}
}
public void itemStateChanged(ItemEvent e)
{
if(e.getItemSelectable() == c1)
{
flag = 1;

}
else
flag = 2;
}
}
class CS001Thread extends Thread
{
ServerSocket server;
Socket socket;
TextArea text1; DataOutputStream out;
DataInputStream in;
public CS001Thread(TextArea text1)
{
this.text1 = text1;
} public void run()
{
try
{
server = new ServerSocket(2230);
socket = server.accept();
out = new DataOutputStream(socket.getOutputStream());
in = new DataInputStream(socket.getInputStream());

talk();
}
catch (IOException e)
{
text1.append("没有建立通道");
}
}
public void talk()
{

while(true)
{
try
{
text1.append(in.readUTF());
out.writeUTF("WF总公司办公室:哦··!\n");
CS002Thread.out.writeUTF("WF总公司办公室:哦··!\n");
}
catch (IOException e)
{
text1.append("数据流通道没有建立\n");

}
}
}
}
class CS002Thread extends Thread
{
ServerSocket server;
Socket socket;
TextArea text2;

static DataOutputStream out;
DataInputStream in;
public CS002Thread(TextArea text2)
{
this.text2 = text2;

}

public void run()
{
try
{
server = new ServerSocket(5670);
socket = server.accept();
out = new DataOutputStream(socket.getOutputStream());
in = new DataInputStream(socket.getInputStream());

talk();
}
catch (IOException e)
{
text2.append("没有建立通道");
}
}
public void talk()
{

while(true)
{
try
{
text2.append(in.readUTF());

}
catch (IOException e)
{
text2.append("数据流通道没有建立\n");

}
}
}
}
客户端1: import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;public class GUI与多线程2 extends Frame implements ActionListener
{
TextArea text;
Panel p;
TextField tf;
Button send,exit;
Panel p2;

Socket socket = null;
DataOutputStream out = null;
DataInputStream in = null;
public GUI与多线程2(String title)
{
super(title);p2 = new Panel();
text = new TextArea(18,60);
text.setEditable(false);
p2.add(text);p = new Panel();
tf = new TextField(10);
send = new Button("发送");
exit = new Button("退出");
p.add(new Label("输入 信息"));
p.add(tf);
p.add(send);
p.add(exit);add(new Label("收到信息",Label.CENTER),"North");
add(p2);
add(p,"South");setSize(480, 400);
setVisible(true);send.addActionListener(this);
exit.addActionListener(this);addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
dispose();
}
});
try
{
socket = new Socket(InetAddress.getLocalHost(),2230);
out = new DataOutputStream(socket.getOutputStream());
in = new DataInputStream(socket.getInputStream());

}
catch (Exception e1)
{
e1.printStackTrace();
}}public void actionPerformed(ActionEvent e)
{
if(e.getSource() == exit)
System.exit(0);
else
{
try
{
out.writeUTF("CS001店办公室:" +tf.getText() + "\n");
text.append("CS001店办公室:" +tf.getText() + "\n");
tf.setText("");
}
catch (IOException ex)
{
text.append("数据流通道没有建立\n");
}
}
}
public void talk()
{
while(true)
{
try
{
text.append(in.readUTF());
}
catch (IOException e)
{
text.append("数据流通道没有建立\n");
}
}
}
public static void main(String[] args)
{
new GUI与多线程2("CS001店办公室").talk();
}
}
package Test;import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;public class GUI与多线程3 extends Frame implements ActionListener
{
TextArea text;
Panel p;
TextField tf;
Button send,exit;
Panel p2;

Socket socket;
DataOutputStream out;
DataInputStream in;
public GUI与多线程3(String title)
{
super(title);p2 = new Panel();
text = new TextArea(18,60);
text.setEditable(false);
p2.add(text);p = new Panel();
tf = new TextField(10);
send = new Button("发送");
exit = new Button("退出");
p.add(new Label("输入 信息"));
p.add(tf);
p.add(send);
p.add(exit);add(new Label("收到信息",Label.CENTER),"North");
add(p2);
add(p,"South");setSize(480, 400);
setVisible(true);send.addActionListener(this);
exit.addActionListener(this);addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
dispose();
}
});
try
{
socket = new Socket(InetAddress.getLocalHost(),5670);
out = new DataOutputStream(socket.getOutputStream());
in = new DataInputStream(socket.getInputStream());
}
catch (Exception e1)
{
e1.printStackTrace();
}}public void actionPerformed(ActionEvent e)
{
if(e.getSource() == exit)
System.exit(0);
else
{
try
{
out.writeUTF("CS002店办公室:" + tf.getText() + "\n");
text.append("CS002店办公室:" + tf.getText() + "\n");
tf.setText("");
}
catch (IOException ex)
{
text.append("数据流通道没有建立\n");
}
}
}
public void talk()
{
while(true)
{
try
{
text.append(in.readUTF());
}
catch (IOException e)
{
text.append("数据流通道没有建立\n");
}
}
}
public static void main(String[] args)
{
new GUI与多线程3("CS002店办公室").talk();
}
}

热心网友 时间:2023-10-23 20:17

你可以通过线程来让服务器接受多个客户端!只需要一个端口就就可以,不明白你为什么需要这么多端口!下面是我写的一个实现接受多个客户端的程序,你参考一下吧!import java.io.*;import java.net.*;public class muitichatserver {private static final int serverport=2019;public static void main(String[]args){ System.out.println("一个简陋的聊天程序嘿嘿"); try{ ServerSocket server=new ServerSocket(serverport); System.out.println("开始监听喽~");<br> Socket client=server.accept(); System.out.println("有连入!"); new chatThread(client).start(); BufferedReader in=new BufferedReader(new InputStreamReader(System.in)); PrintWriter out=new PrintWriter(client.getOutputStream()); while(true){ String keyin=in.readLine(); System.out.println(keyin); out.println(keyin); out.flush(); } }catch(Exception e) {System.out.println("NND 有错呀!"); }}} //import java.io.BufferedReader;import java.io.InputStreamReader;
import java.net.Socket;
class chatThread extends Thread{ private Socket client; public chatThread(Socket c) { client=c; }public void run(){try{BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream()));while(true){String s=in.readLine();if(s!=null)System.out.println(s);}//in.close();}catch(Exception e){System.out.println("线程chatthread出错!");}}}

热心网友 时间:2023-10-23 20:17

可以!套接字来传输!

热心网友 时间:2023-10-23 20:18

服务端采用多线程来写,客户端的接受也要用多线程,因为我现在没时间,如果以后有时间的话再来写写
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
苹果电脑电池充不进电苹果电脑充不进去电是怎么回事 苹果电脑不充电没反应苹果电脑充电指示灯不亮充不了电怎么办 狗狗更加忠诚护家、善解人意,养一只宠物陪伴自己,泰迪能长多大... 描写泰迪狗的外形和特点的句子 国外留学有用吗 花钱出国留学有用吗 !这叫什么号 百万医疗赔付后是否可以续保 前一年理赔过医疗险还能续保吗? 医疗住院险理赔后还能购买吗? 打虎上山原唱是谁 微信团队是什么 样板戏智取威虎山,杨子荣打虎上山唱段唱词 java socket 一对多通信,怎么给指定的设备发送信息 《打虎上山》原唱完整版是什么? java中的一个Socket能不能发送多条数据? 《打虎上山》原唱是什么? 京剧智取威虎山经典唱段有什么? 多线程Socket短连接通讯问题(在线等) 今天微信团队发来信息提示我被多人举报发布垃圾信... java 如果忘记关socket短连接 有什么后果 《智取威虎山》中打虎上山唱段的歌词是什么?? 微信团队里面发信息有什么用吗 java socket怎么断开连接 微信十不准是国家发布的吗? 打虎上山 歌词 怎么让微信团队再发一次限制说明? 打虎上山歌曲歌词 微信团队发布公告,宣布自2016年3月1日起,微信支... 微信团队发来安全提醒会不会封号啥也没干? 《打虎上山》原唱完整版是什么? 至美中国网 java 中socket实现通信的原理 京剧智取威虎山中杨子荣的唱词有哪些 微信团队发布的朋友圈官方广告是什么 如何屏蔽 阿特兹是不是就是马自达6? java中短时间new Socket次数过多,并且socket.close... 永琪美发的官方网站多少 《打虎上山》原唱是谁? java socket问题 《智取威虎山》经典唱段是什么? HairHi美发沙龙网的宗旨 java 简单的socket通信 《打虎上山》原唱是谁? 哪所发型设计学校好 马自达是买进口车型还是国产车型? 汉菜是发物吗 和苋菜有什么区别 京剧杨志荣打虎上山唱段简谱 打虎上山的曲作者 旱菜补血?是所有红色的蔬菜都具有补血的功效吗?