刚接触socket,今天弄的好崩溃~~~~
我已经对照过了正确的代码了呀~ 还是看不出下面的代码哪里出了错,请各位帮我纠正一下
package Frame;import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;public class Server extends Thread{
Socket socket;
BufferedReader in;
PrintWriter out;
public Server(){
try {
ServerSocket ss=new ServerSocket(6);
while(true)
{
Socket s = ss.accept();
new Server(s).start();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public Server(Socket s){
this.socket = s;
}
public void run()
{
try {
in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
out=new PrintWriter(socket.getOutputStream(),true);
System.out.println(in.read());
out.write("Hello,welcome you!");
out.flush();
out.close();
in.close();
socket.close();
}
catch (Exception ex) {
ex.printStackTrace();
}
}
public static void main(String[] args){
new Server().start();
}
}package Frame;import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;public class Server extends Thread{
Socket socket;
BufferedReader in;
PrintWriter out;
public Server(){
try {
ServerSocket ss=new ServerSocket(6);
while(true)
{
Socket s = ss.accept();
new Server(s).start();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public Server(Socket s){
this.socket = s;
}
public void run()
{
try {
in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
out=new PrintWriter(socket.getOutputStream(),true);
System.out.println(in.read());
out.write("Hello,welcome you!");
out.flush();
out.close();
in.close();
socket.close();
}
catch (Exception ex) {
ex.printStackTrace();
}
}
public static void main(String[] args){
new Server().start();
}
}
为什么我的端口在 程序运行一次之后就不能用了呢? 还有为什么关闭程序之后会报错
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(Unknown Source)
at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
at sun.nio.cs.StreamDecoder.read(Unknown Source)
at java.io.InputStreamReader.read(Unknown Source)
at java.io.BufferedReader.fill(Unknown Source)
at java.io.BufferedReader.read(Unknown Source)
at Frame.Server.run(Server.java:46)我想实现一个不断运行的server 在有client访问时 就弹出一个简单的对话框框能进行对话,在这里先多谢各位了
我已经对照过了正确的代码了呀~ 还是看不出下面的代码哪里出了错,请各位帮我纠正一下
package Frame;import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;public class Server extends Thread{
Socket socket;
BufferedReader in;
PrintWriter out;
public Server(){
try {
ServerSocket ss=new ServerSocket(6);
while(true)
{
Socket s = ss.accept();
new Server(s).start();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public Server(Socket s){
this.socket = s;
}
public void run()
{
try {
in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
out=new PrintWriter(socket.getOutputStream(),true);
System.out.println(in.read());
out.write("Hello,welcome you!");
out.flush();
out.close();
in.close();
socket.close();
}
catch (Exception ex) {
ex.printStackTrace();
}
}
public static void main(String[] args){
new Server().start();
}
}package Frame;import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;public class Server extends Thread{
Socket socket;
BufferedReader in;
PrintWriter out;
public Server(){
try {
ServerSocket ss=new ServerSocket(6);
while(true)
{
Socket s = ss.accept();
new Server(s).start();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public Server(Socket s){
this.socket = s;
}
public void run()
{
try {
in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
out=new PrintWriter(socket.getOutputStream(),true);
System.out.println(in.read());
out.write("Hello,welcome you!");
out.flush();
out.close();
in.close();
socket.close();
}
catch (Exception ex) {
ex.printStackTrace();
}
}
public static void main(String[] args){
new Server().start();
}
}
为什么我的端口在 程序运行一次之后就不能用了呢? 还有为什么关闭程序之后会报错
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(Unknown Source)
at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
at sun.nio.cs.StreamDecoder.read(Unknown Source)
at java.io.InputStreamReader.read(Unknown Source)
at java.io.BufferedReader.fill(Unknown Source)
at java.io.BufferedReader.read(Unknown Source)
at Frame.Server.run(Server.java:46)我想实现一个不断运行的server 在有client访问时 就弹出一个简单的对话框框能进行对话,在这里先多谢各位了
把6改成大一点的数字,例如 8088小于1023的端口号可能被系统占用
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetSocketAddress;
import java.net.Socket;public class Client extends Thread{
Socket socket;
BufferedReader in;
PrintWriter out;
public Client(){
}
public void run(){
socket = new Socket();
try {
socket.connect(new InetSocketAddress("192.168.1.45",6),5000);
in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
out=new PrintWriter(socket.getOutputStream(),true);
System.out.println(in.read());
out.write("i'm client!");
out.flush();
out.close();
in.close();
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args){
new Client().start();
}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;public class Server extends Thread{
Socket socket = null;
BufferedReader in;
PrintWriter out;
public Server(){
}
public Server(Socket s){
this.socket = s;
}
public void run()
{
if (socket != null) {
try {
in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
out=new PrintWriter(socket.getOutputStream(),true);
String line = null;
while ((line = in.readLine()) != null) {
System.out.println(line);
}
out.write("Hello,welcome you!");
out.flush();
in.close();
out.close();
socket.close();
}
catch (Exception ex) {
ex.printStackTrace();
}
} else {
try {
ServerSocket ss=new ServerSocket(9900);
while(true)
{
Socket s = ss.accept();
new Server(s).start();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void main(String[] args){
new Server().start();
}
}
package Frame;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetSocketAddress;
import java.net.Socket;public class Client extends Thread { Socket socket; BufferedReader in; PrintWriter out; public Client() { } public void run() {
socket = new Socket();
try { socket.connect(new InetSocketAddress("localhost", 9900), 5000);
in = new BufferedReader(new InputStreamReader(socket
.getInputStream()));
out = new PrintWriter(socket.getOutputStream(), true);
out.write("i'm client!");
out.flush();
socket.shutdownOutput();
String line = null;
while ((line = in.readLine()) != null) {
System.out.println(line);
}
out.close();
in.close();
socket.close(); } catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} public static void main(String[] args) {
new Client().start();
}
}
服务器类import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;import com.jp.frame.LiaoTianFrame;public class QQServer {
private ServerSocket ss;
private int port=5500;
private static boolean flag=true;
public void startServer(){
try {
ss=new ServerSocket(port);
while(flag){
Socket incoming = ss.accept();
new LiaoTianFrame(incoming,incoming.getInetAddress().getHostAddress());
}
} catch (IOException e) {
e.printStackTrace();
}finally{
if(ss!=null)
try {
ss.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void stopServer(){
flag=false;
}
}聊天窗口类import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.util.Date;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;public class LiaoTianFrame extends JFrame{
private JTextArea jiluTXT;
private JTextField mesTXT;
private JScrollPane jiluSP;
private JPanel mesP;
private JButton sendB;
private StringBuffer ms=new StringBuffer();//存储聊天记录
private Socket socket=null;
private DataInputStream read=null;
private DataOutputStream write=null;
private Date date;
private String myname=ListModelThread.myname;
public LiaoTianFrame(Socket socket,String title){
String plaf="com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel";
try {
UIManager.setLookAndFeel(plaf);//设置界面风格
SwingUtilities.updateComponentTreeUI(this);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (UnsupportedLookAndFeelException e) {
e.printStackTrace();
}
init();
this.socket=socket;
try {
read=new DataInputStream(socket.getInputStream());
write=new DataOutputStream(socket.getOutputStream());
} catch (IOException e) {
e.printStackTrace();
}
new Thread(){//启动一个接收信息的线程
private String s;
public void run(){
while(true){
try {
s=read.readUTF();
} catch (IOException e) {
e.printStackTrace();
}
ms.append(s+"\n");
jiluTXT.setText(ms.toString());
}
}
}.start();
this.setTitle(title);
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
this.setSize(320,250);
this.setLocationRelativeTo(null);
this.setVisible(true);
}
public void init(){//初始化界面
jiluTXT=new JTextArea();
jiluTXT.setEditable(false);
jiluSP=new JScrollPane(jiluTXT);
mesTXT=new JTextField();
sendB=new JButton("发送");
sendB.addActionListener(new ActionListener(){//监听事件
@Override
public void actionPerformed(ActionEvent e) {
sendMessage();//调用方法使代码更清晰
}
});
mesP=new JPanel();
mesP.setLayout(new BorderLayout());
mesP.add(mesTXT);
mesP.add(sendB,BorderLayout.EAST);
this.add(jiluSP,BorderLayout.CENTER);
this.add(mesP,BorderLayout.SOUTH);
}
public void sendMessage(){
date=new Date();
String sdate=date.getYear()+"-"+date.getMonth()+"-"+date.getDay()+" "+date.getHours()+":"+date.getMinutes()+":"+date.getSeconds();
String s=sdate+myname+"\n"+mesTXT.getText().trim();
try {
write.writeUTF(s);
} catch (IOException e) {
s="发送失败";
}
ms.append(s+"\n");
jiluTXT.setText(ms.toString());
mesTXT.setText("");
}
}