導航:首頁 > 配伺服器 > 客戶端怎麼給伺服器發信息

客戶端怎麼給伺服器發信息

發布時間:2022-06-03 21:53:28

java socket伺服器怎麼給客戶端發信息

伺服器端和客戶端都是通過SOCKET來進行通信的,首先產生一個
socket實例,通過這個實例,伺服器端調用accept這個方法接收來自客戶端發送的信息.但是在產生socket實例的時候必須初始化一個埠.用來負責接受客戶端的請求!
客戶端要給伺服器發送消息也必須產生一個socket實例,初始化的時候必須指定伺服器的IP地址,並且指定服務接收的埠號,這樣客戶端才能找到伺服器要接收的地方,找到地方就可以發送過去了。和你寫信一樣。找到地址
BufferedReader
in
=
new
BufferedReader(new
InputStreamReader(socket.getInputStream()));
PrintWriter
out
=
new
PrintWriter(socket.getOutputStream());
BufferedReader
wt
=
new
BufferedReader(new
InputStreamReader(System.in));
這個只是用來獲取一個從鍵盤的一個流.傳送給伺服器端的數據都是通過流來表示的。意思是是鍵盤輸入的一個位元組轉化成字元流.並輸出或者寫入!

⑵ 請教一個JAVA UDP程序問題。我編了一個UDP通信程序,實現客戶端向伺服器端發送信息。

正如你所說
,UDP不需要實時連接,客戶端只負責發送,不保證成功,服務端也只接收正確到達的數據包,你沒有起服務端之前的客戶端所發送的UDP數據包都屬於
丟包
,就像我們玩一些網游,如果網路不好,會出現一卡一卡的,本來在這
下一秒
突然移動到
另一個地方
,中間移動的過程沒有出現,這就屬於丟包了。

⑶ 客戶端怎麼使用httpclient向https伺服器發送數據

客戶端向伺服器發送數據時,份兩種情況,SSL單向驗證和SSL雙向驗證

1.SSL單向驗證時

代碼如下:

Java代碼
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.params.HttpClientParams;
import org.apache.commons.httpclient.params.HttpMethodParams;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class ClientSendData {
static Log log = LogFactory.getLog(ClientSendData.class);

private String Url;

// 初始化數據
public ClientSendData() {
Url = "https://test.yihaodian.com:8443/ims/feedbackToPingAn_getData.action";
}

public String sendData(String data) {
String receivedData = null;
try {

Map<String, String> paramsData = new HashMap<String, String>();
paramsData.put("data", data);
receivedData = send(Url, paramsData);
} catch (Exception e) {
e.printStackTrace();
}
return receivedData;
}

public static String send(String url, Map<String, String> paramsMap) {
String result = null;
PostMethod postMethod = null;
HttpClient httpClient = new HttpClient();

httpClient.getParams().setParameter(
HttpMethodParams.HTTP_CONTENT_CHARSET, "utf-8");
postMethod = new PostMethod(url);

if (paramsMap != null && paramsMap.size() > 0) {
NameValuePair[] datas = new NameValuePair[paramsMap.size()];
int index = 0;
for (String key : paramsMap.keySet()) {
datas[index++] = new NameValuePair(key, paramsMap.get(key));
}
postMethod.setRequestBody(datas);

}

HttpClientParams httparams = new HttpClientParams();
httparams.setSoTimeout(60000);
postMethod.setParams(httparams);

try {
int statusCode = httpClient.executeMethod(postMethod);
if (statusCode == HttpStatus.SC_OK) {
result = postMethod.getResponseBodyAsString();
log.info("發送成功!");
} else {
log.error(" http response status is " + statusCode);
}

} catch (HttpException e) {
log.error("error url=" + url, e);
} catch (IOException e) {
log.error("error url=" + url, e);
} finally {
if (postMethod != null) {
postMethod.releaseConnection();
}
}

return result;
}

public static void main(String[] args) {
ClientSendData t = new ClientSendData();
t.sendData("測試SSL單項連接,向服務端發送數據!");
}
}

可能出現的異常

1.java.net.ConnectException: Connection refused: connect

伺服器沒有啟動

2 .javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed

服務端的證書是不可信的。解決辦法見這篇文章 http://zhuyuehua.iteye.com/blog/1102347

3.java.net.SocketException: Software caused connection abort: recv failed

這是由於服務端配置的是SSL雙向認證,而客戶端發送數據是按照伺服器是單向認證時發送的,即沒有將客戶端證書信息一起發送給服務端。

4.org.apache.commons.httpclient.NoHttpResponseException

這一般是服務端防火牆的原因。攔截了客戶端請求。

另外,當服務端負載過重時,也會出現此問題。

5.javax.net.ssl.SSLHandshakeException: Remote host closed connection ring handshake

這是由於服務端配置的是SSL雙向認證,而客戶端發送數據是按照伺服器是單向認證時發送的,即沒有將客戶端證書信息一起發送給服務端。服務端驗證客戶端證書時,發現客戶端沒有證書,然後就斷開了握手連接。

2.SSL雙向驗證時

雙向驗證時,暫時不知道如何用HTTPCLIENT發送數據,如需要雙向驗證時發送數據,參考我另外的文章。另外,有知道HTTPCLIENT如何在雙向驗證時發送數據的,懇請指教。

⑷ 用Socket怎麼從伺服器向客戶端發送消息

最好的方法是:每一客戶端用唯一的ID來標示,
就像QQ號一樣,
在客戶端連接伺服器,發送自己的ID,
然後和相應產生的SOCKET進行綁定,
一個客戶端向另一個客戶端發送信息時,要求在數據包里包含對方的ID號。可以定義一個類型下列的數據結構對數據包進行封裝:
type
struct
_sdata
{
int
sourceID;//發送者自己的ID
int
destID;
//接收者的ID
char
datainfo[1];//數據信息
}SDATA,
*PSDATA;

android做客戶端socket如何讓點擊按鈕向伺服器發送信息

使用基於TCP協議的Socket
一個客戶端要發起一次通信,首先必須知道運行伺服器端的主機IP地址。然後由網路基礎設施利用目標地址,將客戶端發送的信息傳遞到正確的主機上,在Java中,地址可以由一個字元串來定義,這個字元串可以使數字型的地址(比如192.168.1.1),也可以是主機名(example.com)。
而在android 4.0 之後系統以後就禁止在主線程中進行網路訪問了,原因是:

主線程是負責UI的響應,如果在主線程進行網路訪問,超過5秒的話就會引發強制關閉,所以這種耗時的操作不能放在主線程里。放在子線程里,而子線程里是不能對主線程的UI進行改變的,因此就引出了Handler,主線程里定義Handler,子線程里使用。
以下是一個android socket客戶端的例子:
---------------------------------Java代碼---------------------------------------
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import java.io.PrintStream;
import java.io.UnsupportedEncodingException;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.UnknownHostException;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class TCPSocketActivity extends Activity {

public static final String TAG = TCPSocketActivity.class.getSimpleName();

/* 伺服器地址 */
private String host_ip = null;
/* 伺服器埠 */
private int host_port = 0;

private Button btnConnect;
private Button btnSend;
private EditText editSend;
private EditText hostIP;
private EditText hostPort;
private Socket socket;
private PrintStream output;
private String buffer = "";
private Context context;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_socket_test);
context = this;
initView();

btnConnect.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
host_ip = hostIP.getText().toString();
host_port = Integer.parseInt(hostPort.getText().toString());
new Thread(new ConnectThread()).start();
}
});

btnSend.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
new Thread(new SendThread(editSend.getText().toString())).start();
}
});
}

private void toastText(String message) {
Toast.makeText(context, message, Toast.LENGTH_LONG).show();
}

public void handleException(Exception e, String prefix) {
e.printStackTrace();
toastText(prefix + e.toString());
}

public void initView() {
btnConnect = (Button) findViewById(R.id.btnConnect);
btnSend = (Button) findViewById(R.id.btnSend);
editSend = (EditText) findViewById(R.id.sendMsg);
hostIP = (EditText) findViewById(R.id.hostIP);
hostPort = (EditText) findViewById(R.id.hostPort);
}

private void closeSocket() {
try {
output.close();
socket.close();
} catch (IOException e) {
handleException(e, "close exception: ");
}
}

Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (0x123 == msg.what) {
toastText("連接成功!");
}
}
};

/* 連接socket線程 */
public class ConnectThread implements Runnable {
@Override
public void run() {
// TODO Auto-generated method stub
Message msg = Message.obtain();
try {
if (null == socket || socket.isClosed()) {
socket = new Socket();
socket.connect(new InetSocketAddress(host_ip,host_port),5000);
output = new PrintStream(socket.getOutputStream(), true,
"utf-8");
}
msg.what = 0x123;
handler.sendMessage(msg);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}

/*發送信息線程*/
public class SendThread implements Runnable {

String msg;

public SendThread(String msg) {
super();
this.msg = msg;
}

@Override
public void run() {
// TODO Auto-generated method stub
try {
output.print(msg);
} catch (Exception e) {
e.printStackTrace();
}
closeSocket();
}

}

public class SocketThread implements Runnable {
public String txt1;

public SocketThread(String txt1) {
super();
this.txt1 = txt1;
}

@Override
public void run() {
// TODO Auto-generated method stub
Message msg = Message.obtain();
try {
/* 連接伺服器 並設置連接超時為5秒 */
if (socket.isClosed() || null == socket) {
socket = new Socket();
socket.connect(new InetSocketAddress(host_ip,host_port),5000);
}
// 獲取輸入輸出流
PrintStream ou = new PrintStream(socket.getOutputStream(),
true, "UTF-8");
BufferedReader bff = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
// 讀取發來伺服器信息
String line = null;
buffer = "";
while ((line = bff.readLine()) != null) {
buffer = line + buffer;
}

// 向伺服器發送信息
ou.print(txt1);
ou.flush();
// 關閉各種輸入輸出流
bff.close();
ou.close();
socket.close();
msg.what = 0x123;
handler.sendMessage(msg);
} catch (UnknownHostException e) {
} catch (IOException e) {
}
}
}
}
-----------------------------布局文件activity_socket_test.xml--------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/white"
android:orientation="vertical" >

<EditText
android:id="@+id/hostIP"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dip"
android:hint="伺服器ip"
android:singleLine="true"
android:inputType="text" />

<EditText
android:id="@+id/hostPort"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dip"
android:hint="埠"
android:singleLine="true"
android:inputType="number" />

<Button
android:id="@+id/btnConnect"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|center_horizontal"
android:background="@drawable/style_btn_shape"
android:layout_margin="5dip"
android:text="@string/connect"
android:textColor="@color/white" />

<EditText
android:id="@+id/sendMsg"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dip"
android:hint="需要發送的內容"
android:inputType="text" />

<Button
android:id="@+id/btnSend"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_margin="5dip"
android:background="@drawable/style_btn_shape"
android:layout_gravity="center_vertical|center_horizontal"
android:text="@string/send"
android:textColor="@color/white" />

</LinearLayout>
-------------------------樣式文件style_btn_shape.xml----------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<!-- 填充的顏色 -->
<solid android:color="#0465b2" />
<!-- 設置按鈕的四個角為弧形 -->
<!-- android:radius 弧形的半徑 -->
<corners android:radius="15dip" />

<!-- padding:Button裡面的文字與Button邊界的間隔 -->
<padding
android:left="10dp"
android:top="10dp"
android:right="10dp"
android:bottom="10dp"
/>
</shape>
------------------------------END---------------------------------------

⑹ 在linux下,客戶端怎麼給伺服器發消息(用的TCP)

linux下man getaddrinfo,裡面有example。雖然用的是UDP,但是不會差太多。

⑺ C#客戶端和伺服器端傳遞信息

伺服器端接收之後要干什麼?

閱讀全文

與客戶端怎麼給伺服器發信息相關的資料

熱點內容
linuxstorage 瀏覽:361
安卓王者如何掃二維碼 瀏覽:339
騎砍命令沖 瀏覽:455
米家app如何重新設置網路 瀏覽:85
解壓手機殼耐臟 瀏覽:694
誤差反向學習演算法 瀏覽:319
交易貓伺服器說明什麼 瀏覽:646
伺服器陣列如何進 瀏覽:737
捷達車壓縮機多少錢 瀏覽:924
python求1到100之間的奇數 瀏覽:94
加密文件設置成隱藏屬性 瀏覽:675
有伺服器怎麼搭建雲手機 瀏覽:236
怎麼換伺服器絕地求生國際服 瀏覽:399
gal器件編程 瀏覽:257
pdf列印機程序 瀏覽:384
3d庫打開了之後需要解壓嗎 瀏覽:348
迷你號加密華為 瀏覽:622
手機怎麼設置螢石雲視頻不要加密 瀏覽:331
平安信息卡app怎麼還款 瀏覽:511
php常用編輯器 瀏覽:160