java套接字代码 java的套接字服务器类

JAVA socket套接字问题

客户端再起一个线程来负责等待不就行了,多线程处理。还有服务端想高效处理客户端消息,建议用NIO机制来处理,否则客户端很快,服务端不能很快处理,也没意义

垦利网站制作公司哪家好,找创新互联建站!从网页设计、网站建设、微信开发、APP开发、响应式网站开发等网站项目制作,到程序开发,运营维护。创新互联建站于2013年成立到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联建站

java 套接字 怎么发送数 少报错

Socket Socket=ServerSocket.accept();

System.out.println("IP地址"+Socket.getInetAddress()+"端口"+Socket.getPort()+"已经连接到本机");

BufferedReader read = new BufferedReader(new InputStreamReader(Socket.getInputStream(),"UTF-8"));

PrintWriter pw =new PrintWriter(Socket.getOutputStream(),true);

拿到while循环外面,这样服务器端只为第一个连接的客服端服务,程序会正常。或者将Socket=ServerSocket.accept();返回的sock交给宁一个线程处理,然后循环调用String st=read.readLine();读取数据,这样就是一个比较标准的服务器端了,为每一个连进来的客服端,开一个单独的线程为之服务。

主要要理解Socket=ServerSocket.accept();这句代码,返回的Socket是针对单独的一个客户端的,当没有客户端连接时,这句代码会阻塞,直到有客户端连接进来生成的与之对应的客户端。

现在报错是因为,与客户端相对应Socket,读了一行数据,就销毁了,然后又循环到Socket=ServerSocket.accept();去等待一个新的连接。而客户端还往已经销毁的socket发数据,当然客户端会抛Connection reset。

求一个用java编写的套接字实现类似于QQ对话的程序,急用

有两个类,服务器和客户端、

服务器类代码:

package chat;

import java.io.*;

import java.net.*;

import java.util.*;

/*服务器类*/

public class Server {

public ListSocket socketList = new ArrayListSocket();//存放所有连接的客户端的集合

public ServerSocket server;//服务器

public int portNum;//端口号

public Server(int portNum){

this.portNum = portNum;

}

public void innit(){

try {

server = new ServerSocket(portNum);

System.out.println("服务器开启成功!");

int socketNum = 0;

while(true){

Socket socket = server.accept();//被动等待客户端的连接

socketNum++;

System.out.println("第"+socketNum+"个客户端连接成功!!");

socketList.add(socket);//连接的客户端存放到集合里面

new RWThread(socket).start();

}

} catch (IOException e) {

e.printStackTrace();

}

}

class RWThread extends Thread{//接收和发送消息的线程

public Socket socket;

public RWThread(Socket socket){

this.socket = socket;

}

public void run() {

super.run();

try {

BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));

while(true){

String message = br.readLine();

System.out.println(message);//接收客户端发来的消息

for(int i=0;isocketList.size();i++){//发送给所有连接的客户端

PrintWriter pw = new PrintWriter(new OutputStreamWriter(socketList.get(i).getOutputStream()));

pw.println(message);

pw.flush();

}

}

} catch (IOException e) {

e.printStackTrace();

}

}

}

public static void main(String[] args) {

int portNum = 8888;//创建服务器的端口号

Server server = new Server(portNum);

server.innit();

}

}

客户端类:

package chat;

import java.io.*;

import java.net.*;

import java.util.*;

/*客户端类*/

public class Client {

public Socket socket;

public Client(){

Scanner sca = new Scanner(System.in);

try {

socket = new Socket("127.0.0.1",8888);//创建客户端

new ReadThread(socket).start();//开启读取从服务器端发来的信息

while(true){

PrintWriter pw = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));

String message = sca.nextLine();

pw.println(message);//向服务器发送信息

pw.flush();

}

} catch (UnknownHostException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

System.out.println("错误:服务器未开启!!!");

}

}

class ReadThread extends Thread{//读取服务器发来信息的线程

public Socket socket;

public ReadThread(Socket socket){

this.socket = socket;

}

public void run() {

super.run();

try {

BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));

while(true){

String message = br.readLine();

System.out.println(message);//输出信息

}

} catch (IOException e) {

e.printStackTrace();

}

}

}

public static void main(String[] args) {

Client client = new Client();

}

}

现打开服务器类,然后可以打开多个客户端进行聊天


标题名称:java套接字代码 java的套接字服务器类
文章路径:http://scyanting.com/article/hhpded.html