
服务端:
ServerSocket serverSocket = new ServerSocket(2008);while (true) {
Socket socket = serverSocketaccept();
MyThread thread = new MyThread(socket);
threadstart();
}public class MyThread extends Thread {
private Socket socket;
public MyThread(Socket socket) {
thissocket = socket;
}
@Override
public void run() {
superrun();
try {
InputStream is = socketgetInputStream();
BufferedReader bufReader = new BufferedReader(new InputStreamReader(is));
String line = "";
String s = "";
while ((s = bufReaderreadLine()) != null) {
line = line + s;
}
Systemoutprintln("接收到:" + line);
} catch (IOException e) {
eprintStackTrace();
}
}
}
客户端:
public static void main(String[] args) throws UnknownHostException, IOException {Socket socket=new Socket("1921680101", 2008);
OutputStream out=socketgetOutputStream();
PrintWriter pw=new PrintWriter(new OutputStreamWriter(out));
pwprint("12345上山打老虎");
pwflush();
pwclose();
outclose();
}
给你一个我写的示例,用的是基于TCP的Socket技术,你锻炼一下,改一改,不会改再找我!
客户端:
import javanetSocket;
import javaioInputStream;
import javaioOutputStream;
import javaioInputStreamReader;
import javaioBufferedReader;
public class TcpClient {
public static void main(String[] args) throws Exception
{
//创建客户端Socket服务,并且制定主机和duank
Socket s = new Socket("1921681104",10002);//连接固定的主机和端口
//为了发送数据,获取Socket中的输入输出流
OutputStream out = sgetOutputStream();
InputStreamReader isr = new InputStreamReader(Systemin);
BufferedReader br = new BufferedReader(isr);
String line = null;
//读取服务器发过来的数据
InputStream in = sgetInputStream();
byte[] buf = new byte[1024];
while((line = brreadLine())!=null)
{
outwrite(linegetBytes());
if("886"equals(line))
break;
int len = inread(buf);
String content = new String(buf,0,len);
Systemoutprintln("Server:"+content);
}
sclose();
}
}
服务器:
/
需求分析:
使用TCP协议,写服务器端。做到服务器能收到客户端的信息,也能向客户端发送信息
/
package JavaNetProgramming;
import javanetServerSocket;
import javanetSocket;
import javaioInputStream;
import javaioOutputStream;
import javaioInputStreamReader;
import javaioBufferedReader;
public class TcpServer {
public static void main(String[] args) throws Exception
{
//建立服务器的Socket服务,并且监听一个端口
ServerSocket ss = new ServerSocket(10002);
Socket s = ssaccept();
InputStream is = sgetInputStream();
//从服务器端向客户端发送数据
OutputStream out = sgetOutputStream();
InputStreamReader isr = new InputStreamReader(Systemin);
BufferedReader br = new BufferedReader(isr);
String line = null;
while(true)
{
//通过accept()方法获得客户端传过来的Socket对象
// Systemoutprintln("getByNanme():"+sgetInetAddress());
Systemoutprint("getHostAddress():"+sgetInetAddress()getHostAddress());
//获取客户端发过来的数据,就要使用客户端对象的读取流来读取数据
byte[] buf = new byte[1024];
int len = isread(buf);//把流中数据读到字节数组中
String content = new String(buf,0,len);
Systemoutprintln(" "+content);
if("886"equals(content))
break;
while((line = brreadLine())!=null)
{
outwrite(linegetBytes());
break;
}
}
sclose(); //循环内有判断语句,这句话才不出错
ssclose();
}
}
分为两种模式:TCP和UDP
TCP有客户端(Client)和服务端(Server)的概念,服务端指定一个ip和端口(port)并且监听是否有客户端接入,客户端通过ip+port连接到服务端,通过socket得到输入输出流,他们之间的通信都是通过流(Stream)进行的,一个服务端可以接入多个客户端,客户端之间的通信依赖于服务端的转发。
UDP并没有严格的客户端和服务端的区别,你只需要建立一个socket指定你要发送的目标ip和port就行了,他是以数据包的形式发送数据(DataPacket),数据包里面存放的是byte[],有需要的话可补充具体实现源码
先运行服务器端类,然后再运行客户端类,就可以了
/
服务器端类
/
public class Server {
public static void main(String[] args) throws IOException{
Server server = new Server();
serverstart();
}
public void start() throws IOException{
//ServerSocket 对当前服务器的服务端口的绑定
//这个端口号不能重复绑定,不能同时执行两边
ServerSocket ss = new ServerSocket(8888);
while(true){
//accept 开始等待(IO Block)客户连接(启动监听),如果没有客户端连接,一直挂起等待下去。
//如果有客户端连接,才会继续执行下去,返回的Socket实例s 代表对于客户端连接。
Socket s = ssaccept();
//创建并启动客户服务线程,为客户服务
//当前线程再次返回到accept等待,下一个客户连接
new Service(s)start();//创建线程
}
}
class Service extends Thread{
Socket s;
public Service(Socket s){
thiss = s;
}
public void run(){
try{
//s代表客户端
//s 中的in代表从客户传递过来的流
//s 中的out代表从服务器到客户端传输流
InputStream in = sgetInputStream();
Scanner sc = new Scanner(in);//Systemin是 *** 作系统后台
OutputStream out = sgetOutputStream();
//outwrite("您好!您需要点啥?\n"getBytes("GBK"));
//outflush();//清理缓冲,确保发送到客户端
while(true){
String str = scnextLine();//IO Block
if(strequals("连接服务器")){
outwrite("连接成功!\n"getBytes("GBK"));
outflush();
break;
}
}
}catch(IOException e){
eprintStackTrace();
}
}
}
}
/
客户端类
/
public class Client {
public static void main(String[] args) throws IOException{
// new Socket() 连接到指定的服务器端口,当前用的是本机的端口
Socket s = new Socket("localhost", 8888);
//返回s代表连接到了服务器
//s代表对服务器的连接
InputStream in = sgetInputStream();
OutputStream out = sgetOutputStream();
outwrite("连接服务器\n"getBytes("gbk"));
outflush(); //清理缓冲,确保发送到服务端
Scanner sc = new Scanner(in);
String str = scnextLine();
Systemoutprintln(str); //把从服务器返回的信息,打印到控制台。
outflush();
}
}
以上就是关于JAVA问题:用socket编写一个服务器端程序全部的内容,包括:JAVA问题:用socket编写一个服务器端程序、JAVA 问题,用socket编写一个客户端程序、java socket编程怎么实现等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)