首页编程java编程socket编程java,java websocket框架

socket编程java,java websocket框架

编程之家2026-06-05879次浏览

这篇文章给大家聊聊关于socket编程java,以及java websocket框架对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

socket编程java,java websocket框架

浅谈Java中如何利用socket进行网络编程(一)

Socket是网络上运行的两个程序间双向通讯的一端,它既可以接受请求,也可以发送请求,利用它可以较为方便的编写网络上的数据的传递。在java中,有专门的socket类来处理用户的请求和响应。利用SOCKET类的方法,就可以实现两台计算机之间的通讯。这里就介绍一下在JAVA中如何利用socket进行网络编程。在Java中Socket可以理解为客户端或者服务器端的一个特殊的对象,这个对象有两个关键的方法,一个是getInputStream方法,另一个是getOutputStream方法。getInputStream方法可以得到一个输入流,客户端的Socket对象上的getInputStream方法得到的输入流其实就是从服务器端发回的数据流。GetOutputStream方法得到一个输出流,客户端Socket对象上的getOutputStream方法返回的输出流就是将要发送到服务器端的数据流,(其实是一个缓冲区,暂时存储将要发送过去的数据)。程序可以对这些数据流根据需要进行进一步的封装。本文的例子就对这些数据流进行了一定的封装(关于封装可以参考Java中流的实现部分)。一、建立服务器类 Java中有一个专门用来建立Socket服务器的类,名叫ServerSocket,可以用服务器需要使用的端口号作为参数来创建服务器对象。ServerSocket server= new ServerSocket(9998)这条语句创建了一个服务器对象,这个服务器使用9998号端口。当一个客户端程序建立一个Socket连接,所连接的端口号为9998时,服务器对象server便响应这个连接,并且server.accept()方法会创建一个Socket对象。服务器端便可以利用这个Socket对象与客户进行通讯。Socket incoming= server.accept()进而得到输入流和输出流,并进行封装BufferedReader in= new BufferedReader(new InputStreamReader(incoming.getInputStream())); PrintWriter out= new PrintWriter(incoming.getOutputStream(),true);随后,就可以使用in.readLine()方法得到客户端的输入,也可以使用out.println()方法向客户端发送数据。从而可以根据程序的需要对客户端的不同请求进行回应。

java中什么是socket编程

网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket。Socket通常用来实现客户方和服务方的连接。Socket是TCP/IP协议的一个十分流行的编程界面,一个Socket由一个IP地址和一个端口号唯一确定。

但是,Socket所支持的协议种类也不光TCP/IP一种,因此两者之间是没有必然联系的。在Java环境下,Socket编程主要是指基于TCP/IP协议的网络编程。

用Java的socket编程实现c/s结构程序

今天太晚了,改天给你做一个,记得提醒我,这个如果只是要个简单的,我半个小时就搞定了

给我个邮箱

现在给贴出我的代码:整个结构分两个工程

socket编程java,java websocket框架

1。服务端工程NioServer.java:采用nio方式的异步socket通信,不仅可以实现你的服务器还可以让你多学习一下什么是nio

2。客户端工程UserClient.java:采用Swing技术画了一个简单的UI界面,比较土,原因是我没那么多时间去设计界面,你需要的话可以自己去修改得漂亮点,相信不难

现在贴工程1:

package com.net;

import java.io.IOException;

import java.net.InetSocketAddress;

socket编程java,java websocket框架

import java.net.ServerSocket;

import java.nio.ByteBuffer;

import java.nio.channels.SelectionKey;

import java.nio.channels.Selector;

import java.nio.channels.ServerSocketChannel;

import java.nio.channels.SocketChannel;

import java.util.Iterator;

import java.util.Set;

public class NioServer{

public static final int SERVERPORT=5555;

public static final String USERNAME="wangzhirong";

public static final String PASSWORD="123456";

public static final String ISACK="ACK";

public static final String ISNAK="NAK!";

// Selector selector;//选择器

// SelectionKey key;//key。一个key代表一个Selector在NIO通道上的注册,类似主键;

////取得这个Key后就可以对Selector在通道上进行操作

private ByteBuffer echoBuffer= ByteBuffer.allocate( 1024);//通道数据缓冲区

public NioServer(){

}

public static void main(String[] args) throws IOException{

NioServer ns=new NioServer();

ns.BuildNioServer();

}

public void BuildNioServer() throws IOException{

/////////////////////////////////////////////////////////

///////先对服务端的ServerSocket进行注册,注册到Selector////

/////////////////////////////////////////////////////////

ServerSocketChannel ssc= ServerSocketChannel.open();//新建NIO通道

ssc.configureBlocking( false);//使通道为非阻塞

ServerSocket ss= ssc.socket();//创建基于NIO通道的socket连接

//新建socket通道的端口

ss.bind(new InetSocketAddress("127.0.0.1",SERVERPORT));

Selector selector=Selector.open();//获取一个选择器

//将NIO通道选绑定到择器,当然绑定后分配的主键为skey

SelectionKey skey= ssc.register( selector, SelectionKey.OP_ACCEPT);

////////////////////////////////////////////////////////////////////

////接收客户端的连接Socket,并将此Socket也接连注册到Selector////

///////////////////////////////////////////////////////////////////

while(true){

int num= selector.select();//获取通道内是否有选择器的关心事件

if(num<1){continue;}

Set selectedKeys= selector.selectedKeys();//获取通道内关心事件的集合

Iterator it= selectedKeys.iterator();

while(it.hasNext()){//遍历每个事件

try{

SelectionKey key=(SelectionKey)it.next();

//有一个新联接接入事件,服务端事件

if((key.readyOps()& SelectionKey.OP_ACCEPT)

== SelectionKey.OP_ACCEPT){

//接收这个新连接

ServerSocketChannel serverChanel=(ServerSocketChannel)key.channel();

//从serverSocketChannel中创建出与客户端的连接socketChannel

SocketChannel sc= serverChanel.accept();

sc.configureBlocking( false);

// Add the new connection to the selector

//把新连接注册到选择器

SelectionKey newKey= sc.register( selector,

SelectionKey.OP_READ);

it.remove();

System.out.println("Got connection from"+sc);

}else

//读客户端数据的事件,此时有客户端发数据过来,客户端事件

if((key.readyOps()& SelectionKey.OP_READ)

== SelectionKey.OP_READ){

//读取数据

SocketChannel sc=(SocketChannel)key.channel();

int bytesEchoed= 0;

while((bytesEchoed= sc.read(echoBuffer))> 0){

System.out.println("bytesEchoed:"+bytesEchoed);

}

echoBuffer.flip();

System.out.println("limet:"+echoBuffer.limit());

byte [] content= new byte[echoBuffer.limit()];

echoBuffer.get(content);

String result=new String(content);

doPost(result,sc);

echoBuffer.clear();

it.remove();

}

}catch(Exception e){}

}

}

}

public void doPost(String str,SocketChannel sc){

boolean isok=false;

int index=str.indexOf('|');

if(index>0){

String name=str.substring(0,index);

String pswd=str.substring(index+1);

if(pswd==null){pswd="";}

if(name!=null){

if(name.equals(USERNAME)

&& pswd.equals(PASSWORD)

){

isok=true;

}else{

isok=false;

}

}else{

isok=false;

}

}else{

isok=false;

}

String result="";

if(isok){

result="ACK";

}else{

result="NAK!";

}

ByteBuffer bb= ByteBuffer.allocate( result.length());

bb.put(result.getBytes());

bb.flip();

try{

sc.write(bb);

} catch(IOException e){

e.printStackTrace();

}

bb.clear();

}

}

下面贴工程2

import java.awt.Color;

import java.awt.Dimension;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.net.Socket;

import java.net.UnknownHostException;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

import javax.swing.JPasswordField;

import javax.swing.JTextField;

public class UserClient implements ActionListener{

JFrame jf;

JPanel jp;

JLabel label_name;

JLabel label_pswd;

JTextField userName;

JButton jb;

JPasswordField paswrd;

JLabel hintStr;

public UserClient(){

jf=new JFrame("XXX登陆系统");

jp=new JPanel();

jf.setContentPane(jp);

jf.setPreferredSize(new Dimension(350,220));

jp.setPreferredSize(new Dimension(350,220));

jp.setBackground(Color.gray);

label_name=new JLabel();

label_name.setPreferredSize(new Dimension(150,30));

label_name.setText("请输入帐户(数字或英文):");

userName=new JTextField();

userName.setPreferredSize(new Dimension(150,30));

jp.add(label_name);

jp.add(userName);

label_pswd=new JLabel();

label_pswd.setPreferredSize(new Dimension(150,30));

label_pswd.setText("请输入密码:");

jp.add(label_pswd);

paswrd=new JPasswordField();

paswrd.setPreferredSize(new Dimension(150,30));

jp.add(paswrd);

jb=new JButton("OK");

jb.setPreferredSize(new Dimension(150,30));

jb.setText("确定");

jb.addActionListener( this);

jp.add(jb);

hintStr=new JLabel();

hintStr.setPreferredSize(new Dimension(210,40));

hintStr.setText("");

hintStr.setForeground(Color.RED);

jp.add(hintStr);

jf.pack();

jf.setVisible(true);

jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

private String name;

private String pswd;

public void actionPerformed(ActionEvent e){

name=userName.getText().trim();

pswd=new String(paswrd.getPassword());

if(pswd==null){

pswd="";

}else{

pswd=pswd.trim();

}

if(name!=null&& name.length()>0){

hintStr.setText("正在验证客户端,请稍候...");

start();

}

}

OutputStream os;

Socket s;

InputStream is;

public void start(){

//建立联网线程

new Thread(new Runnable(){

public void run(){

try{

s=new Socket("127.0.0.1",5555);

//写

os=s.getOutputStream();

os.write(name.getBytes());

os.write('|');//用户名与密码用"|"分隔

os.write(pswd.getBytes());

os.flush();

//读内容

Thread.sleep(1000);

is=s.getInputStream();

int len=is.available();

System.out.println("len:"+len);

byte[] bytes=new byte[len];

is.read(bytes);

String resut=new String(bytes);

System.out.println("resut:"+resut);

//TODO这里通过返回结果处理

if(resut.equals("ACK")){

hintStr.setText("验证成功,欢迎光临!");

}else{

paswrd.setText(null);

hintStr.setText("用户名或密码错误,请重新输入");

}

} catch(UnknownHostException e){

e.printStackTrace();

} catch(IOException e){

e.printStackTrace();

} catch(InterruptedException e){

e.printStackTrace();

}finally{

// try{

// os.close();

// is.close();

// s.close();

//} catch(IOException e){

// e.printStackTrace();

//}

}

}

}).start();

}

public static void main(String[] args){

new UserClient();

}

}

好了,文章到此结束,希望可以帮助到大家。

dnf 黑暗武士?dnf黑暗武士毕业武器java八大基本数据类型(8种基本数据类型)