简单Socket
服务器端
int PORT = 8888; // 侦听端口
// 创建ServerSocket,相当于建了一个服务器供客户端访问
ServerSocket serverSocket = new ServerSocket(PORT);
// 开始循环
while (true) {
// accept()方法用来产生阻塞,等待连接,知道一个会话产生
socket = serverSocket.accept();
// 处理连接的线程类
ServerThread st = new ServerThread(socket);
// 启动线程处理
new Thread(st).start();
}
端口的分配必须是唯一的。因为端口是为了唯一标识每台计算机唯一服务的。另外端口号是从0~65535之间的,前1024个端口已经被Tcp/Ip 作为保留端口,因此你所分配的端口只能是1024个之后的。
客户端
int PORT = 8888; // 侦听端口
// 建立连接
socket = new Socket(“127.0.0.1”, 8888);
// 输入数据的读取,getInputStrame()方法获得网络连接输入
BufferedReader netIn = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//与输出操作类似的输出流,也是唯一一个可以包装字节流和字符流的流
PrintWriter netOut = new PrintWriter(socket.getOutputStream());
客户机必须知道有关服务器的IP地址。对于这一点Java也提供了一个相关的类InetAddress 该对象的实例必须通过它的静态方法来提供。它的静态方法主要提供了得到本机IP 和通过名字或IP直接得到InetAddress的方法。Socket client=new Socket(InetAddress.getLocalHost(),8888);
利用多线程实现多个客户端与服务器的连接
import java.net.*;
import java.io.*;
public class ThreadServer extends Thread
{
private Socket client;
public ThreadServer(Socket c)
{
this.client=c;
}
public void run()
{
try
{
BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream()));
PrintWriter out=new PrintWriter(client.getOutputStream());
//Mutil User but can't parallel
while (true)
{
String str=in.readLine();
System.out.println(str);
out.println("has receive....");
out.flush();
if (str.equals("end"))
break;
}
client.close();
}
catch (IOException ex)
{
}
finally
{
}
}
public static void main(String[] args)throws IOException
{
ServerSocket server=new ServerSocket(8000);
while (true)
{
//transfer location change Single User or Multi User
ThreadServer mu=new ThreadServer(server.accept());
mu.start();
}
}
}
浙公网安备 33010602011771号