首页编程java编程java socket编程例子,java socket发送数据

java socket编程例子,java socket发送数据

编程之家2026-05-191023次浏览

老铁们,大家好,相信还有很多朋友对于java socket编程例子和java socket发送数据的相关问题不太懂,没关系,今天就由我来为大家分享分享java socket编程例子以及java socket发送数据的问题,文章篇幅可能偏长,希望可以帮助到大家,下面一起来看看吧!

java socket编程例子,java socket发送数据

浅谈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通信是怎么实现的

java编程对于Socket之间的通信过程如下:

服务端往Socket的输出流里面写东西,客户端就可以通过Socket的输入流读取对应的内容。Socket与Socket之间是双向连通的,所以客户端也可以往对应的Socket输出流里面写东西,然后服务端对应的Socket的输入流就可以读出对应的内容。下面来看一些服务端与客户端通信的例子:

publicclassServer{

publicstaticvoidmain(Stringargs[])throwsIOException{

//为了简单起见,所有的异常信息都往外抛

java socket编程例子,java socket发送数据

intport=8899;

//定义一个ServerSocket监听在端口8899上

ServerSocketserver=newServerSocket(port);

//server尝试接收其他Socket的连接请求,server的accept方法是阻塞式的

Socketsocket=server.accept();

//跟客户端建立好连接之后,我们就可以获取socket的InputStream,并从中读取客户端发过来的信息了。

Readerreader=newInputStreamReader(socket.getInputStream());

charchars[]=newchar[64];

intlen;

StringBuildersb=newStringBuilder();

while((len=reader.read(chars))!=-1){

sb.append(newString(chars,0,len));

}

System.out.println("fromclient:"+sb);

reader.close();

socket.close();

server.close();

}

}客户端代码

Java代码publicclassClient{

publicstaticvoidmain(Stringargs[])throwsException{

//为了简单起见,所有的异常都直接往外抛

Stringhost="127.0.0.1";//要连接的服务端IP地址

intport=8899;//要连接的服务端对应的监听端口

//与服务端建立连接

Socketclient=newSocket(host,port);

//建立连接后就可以往服务端写数据了

Writerwriter=newOutputStreamWriter(client.getOutputStream());

writer.write("HelloServer.");

writer.flush();//写完后要记得flush

writer.close();

client.close();

}

}

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

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

给我个邮箱

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

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

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

现在贴工程1:

package com.net;

import java.io.IOException;

import java.net.InetSocketAddress;

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();

}

}

关于java socket编程例子和java socket发送数据的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

开源cms系统?开源CMS建站系统flash游戏代码修改(ce修改flash游戏数值)