服务器程序编写:
①调用ServerSocket(int port)创建一个服务器端套接字,并绑定到指定端口上;②调用accept(),监听连接请求,如果客户端请求连接,则接受连接,返回通信套接字。③调用Socket类的getOutputStream()和getInputStream获取输出流和输入流,开始网络数据的发送和接收。④最后关闭通信套接字。
客户端程序编写:
①调用Socket()创建一个流套接字,并连接到服务器端; ②调用Socket类的getOutputStream()和getInputStream获取输出流和输入流,开始网络数据的发送和接收。 ③最后关闭通信套接字。
下面给出多线程的实现:
服务器端:
package socket;
import java.net.ServerSocket;
import java.net.Socket;
public class TCPServer {
public static void server()
{
try {
// 创建serversocket,绑定端口
ServerSocket ss=new ServerSocket(6000);
while(true)
{
//accept()函数处于阻塞状态,直到收到客户端的连接
Socket s = ss.accept();
//多线程处理机制,每当收到一个链接,就创建一个新的线程去处理它
new Network(s).start();
}
//ss.close();
}
catch (Exception ex) {
ex.printStackTrace();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
server();
}
}
package socket;
import java.io.BufferedOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class Network extends Thread {
private Socket s;
public Network(Socket s)
{
this.s=s;
}
public void run()
{
try {
OutputStream os=s.getOutputStream();
//输出流采用缓冲机制
BufferedOutputStream bos=new BufferedOutputStream(os);
InputStream is=s.getInputStream();
bos.write("hi,welcome you!".getBytes());
//flush()函数强制缓冲区的内容输出,如果不用此函数,只有当缓冲区满后才输出
bos.flush();
byte[] buf=new byte[100];
int len=is.read(buf);
System.out.println(new String(buf,0,len));
os.close();
bos.close();
is.close();
s.close();
}
catch (Exception ex) {
ex.printStackTrace();
}
}
}
客户端:
package socket;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
public class TCPClient {
public static void client()
{
try {
//客户端创建Socket对象,传入服务器端的地址和端口号
Socket s=new Socket(InetAddress.getByName(null),6000);
OutputStream os=s.getOutputStream();
InputStream is=s.getInputStream();
byte[] buf=new byte[100];
int len=is.read(buf);
System.out.println(new String(buf,0,len));
os.write("Hi,this is client".getBytes());
os.close();
is.close();
s.close();
}
catch (Exception ex) {
ex.printStackTrace();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
client();
}
}
本文详细介绍了服务器端和客户端如何使用Java的Socket类进行多线程网络通信,包括创建服务器套接字、接受连接、读写数据及关闭连接等关键步骤。
1471

被折叠的 条评论
为什么被折叠?



