java网络编程之TCP/IP ——SocketServer与Socket

本文深入讲解了Java网络编程的核心概念和技术实现,包括URL连接、HTTP请求处理、TCP/IP及UDP套接字编程等内容,并提供了服务器端与客户端的具体实现示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[b]java网络编程主要包含4部分:[/b] (注意设置超时时间)
1.URL 连接 :类 URL 代表一个统一资源定位符,它是指向互联网“资源”的指针。资源可以是简单的文件或目录,也可以是对更为复杂的对象的引用,例如对数据库或搜索引擎的查询。
2.HttpURLConnection连接:相当于servlet,发送单个以post或get方式的请求,
3.TCP/IP连接 可靠传输ServerSocket类
4.UDP连接 DatagramSocket 类, 此类表示用来发送和接收数据报包的套接字。

TCP/IP 连接 Server服务器端

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;


/**
*@ClassName:Server
*@author: chenyoulong
*@date :2012-7-30 上午10:35:09
*@Description:TODO
*/
public class SendServer {

/**
* @throws IOException
* @Title: main
* @Description: TODO
* @param @param args
* @return void
* @throws
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
ServerSocket server=new ServerSocket(8888);
System.out.println("server start");
Socket sock=server.accept();
sock.setSoTimeout(6000); //服务器端设置连接超时时间,该操作只对读取(read)操作有效。

//读取
//字节流的形式读取
// 优缺点分析,弱点:受byte[]大小的限制 ,优点:不受回车符(\r)和换行符(\n)限制
InputStream input=sock.getInputStream();
byte[] buf =new byte[1024];
System.out.println("InputStream==="+input);
if(input!=null){
int len=input.read(buf);
ToolKit.writeLog(SendServer.class.getName(), "服务器端收到的报文:\n"+new String(buf, 0, len));
}


/* //字符流的形式读取
//(遇到换行符或者回车符就终止,还是谨慎使用)
BufferedReader read=new BufferedReader(new InputStreamReader(sock.getInputStream()));
String readStr=null;
if((readStr=read.readLine())!=null){
ToolKit.writeLog(Server.class.getName(), "服务器端收到的报文:\n"+readStr);
}
if(read!=null) read.close();
*/


/*//输出
String outStr="我是server服务器端";
BufferedWriter write=new BufferedWriter(new OutputStreamWriter(sock.getOutputStream()));

if(outStr!=null){
write.write(outStr);
}
if(write!=null) write.close();*/


//挂关闭资源
if(sock!=null) sock.close();
if(server!=null) server.close();
}


TCP/IP连接 Client客户端


import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
import org.apache.log4j.Logger;


/**
*@ClassName:ReceiveClient
*@author: chenyoulong
*@date :2012-8-3 下午2:17:26
*@Description:TODO
*/
public class ReceiveClient {
private final String IP=Setting.RECEIVE_IP;
private final int PORT=Setting.RECEIVE_PORT;
private Logger log = Logger.getLogger(Sender.class.getName());
//发送
/**
* @throws Exception
* 发送报文
* @Title: send
* @Description: TODO
* @param @param reqMessage
* @return void
* @throws
*/
public void send(String reqMessage) throws Exception{
Socket sock=null;
BufferedOutputStream out=null;
try {
sock=new Socket();

SocketAddress sockAdd=new InetSocketAddress(IP, PORT);
sock.connect(sockAdd, 2000); //客户端设置连接建立超时时间

out=new BufferedOutputStream(sock.getOutputStream());
out.write(reqMessage.getBytes());
out.flush();

} catch (UnknownHostException e) {
// TODO Auto-generated catch block
log.error("网络连接异常"+Strings.getStackTrace(e));
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
log.error("网络连接异常\n"+Strings.getStackTrace(e));
e.printStackTrace();
}finally{
if(out!=null){
try {
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace(); }
}
if(sock!=null){
try {
sock.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}


//接收
public String reiceve() throws Exception{
Socket sock=null;
BufferedInputStream in=null;

try {
sock=new Socket(IP,PORT);
in = new BufferedInputStream(sock.getInputStream());
if ((sock == null) || (in == null)) {
throw new Exception("套接口无效,无法读取数据");
}

} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

byte[] bts = new byte[10000];
int totalLen = 0, len = 0;
while ((len = in.read(bts, totalLen, 1000)) != -1) {
totalLen += len;
}
String result = new String(bts); //注意字符编码
return result.trim();
}


//main函数示例

public static void main(String[] args){
//发送报文


//发送
String str="我是客户端!"
try {
new ReceiveClient().send(str);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


//接收报文
/*try {
String recStr=new Receiver().reiceve();
System.out.println("客户端接收到的结果=="+recStr);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}*/
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值