socket通信的问题
socket服务端的代码
/* server.c */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define MAXLINE 80
#define SERV_PORT 8000
int main(void){
struct sockaddr_in servaddr;//服务端地址
struct sockaddr_in cliaddr;//客户端地址
socklen_t cliaddr_len; //客户端长度
int listenfd;//监听端口的文件描述符
int connfd;//
char buf[MAXLINE];
char str[INET_ADDRSTRLEN];
int i, n;
listenfd = socket(AF_INET, SOCK_STREAM, 0); //创建socket文件描述
bzero(&servaddr, sizeof(servaddr)); //
servaddr.sin_family = AF_INET; //TCP IP
servaddr.sin_addr.s_addr = htonl(INADDR_ANY); //监听的地址
servaddr.sin_port = htons(SERV_PORT);//监听的端口
bind(listenfd, (struct sockaddr *)&servaddr, sizeof(servaddr));//把文件描述符与端口进行绑定
listen(listenfd, 20); //开始监听
printf("Accepting connections111 ...\n");
while (1)
{
printf("one step...\n");
cliaddr_len = sizeof(cliaddr);
printf("two step...\n");
connfd = accept(listenfd, (struct sockaddr *)&cliaddr, &cliaddr_len); //这里第二次accept好像阻塞了
printf("three step...\n");
n = read(connfd, buf, MAXLINE);
printf("received from %s at PORT %d\n", inet_ntop(AF_INET, &cliaddr.sin_addr, str, sizeof(str)), ntohs(cliaddr.sin_port));
for (i = 0; i < n; i++) buf[i] = toupper(buf[i]);
write(connfd, buf, n);
}
close(connfd);
}
客户端的代码
/* client.c */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define MAXLINE 80
#define SERV_PORT 8000
int main(int argc, char *argv[]){
struct sockaddr_in servaddr;
char buf[MAXLINE];
int sockfd, n; char *str;
if (argc != 2) {
fputs("usage: ./client message\n", stderr); exit(1);
}
str = argv[1];
sockfd = socket(AF_INET, SOCK_STREAM, 0);
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
inet_pton(AF_INET, "127.0.0.1", &servaddr.sin_addr);
servaddr.sin_port = htons(SERV_PORT);
connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));
while(1)
{
memset(buf, 0, 20);
printf("buf is %d \n",buf);
printf("begin write\n");
write(sockfd, str, strlen(str));
printf("one step\n");
n = read(sockfd, buf, MAXLINE); //这里第二次read也阻塞了
printf("two step\n");
printf("Response from server:\n");
write(STDOUT_FILENO, buf, n);
printf("\n end write\n");
}
printf("begin close\n");
close(sockfd);
return 0;
}
运行socket客户端程序
./client aa
buf is 804396960
begin write
one step
two step
Response from server:
AA
end write
buf is 804396960
begin write
one step
运行socket服务端程序
./serv
Accepting connections111 ...
Accepting connections222 ...
one step...
two step...
three step...
received from 127.0.0.1 at PORT 58845
one step...
two step...
相关推荐
Socket通信,通过异步,解决粘包问题
Socket通信,通过异步,解决粘包问题
Java Socket通信介绍及可能遇到的问题解决
最近在学习Java中的Socket通信,所以下面这篇文章主要给大家介绍了关于Java Socket通信介绍及可能遇到问题的解决方法,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起看看吧。
Python中的Socket 与 ScoketServer 通信及遇到问题解决方法
Socket有一个缓冲区,缓冲区是一个流,先进先出,发送和取出的可自定义大小的,如果取出的数据未取完缓冲区,则可能存在数据怠慢。其中【recv(1024)】表示从缓冲区里取最大为1024个字节,但实际取值大小是不确定的,推荐其值小于等于8192。 黏包问题: Socket发送两条连续数据时,可能最终会拼接成一条进行发送 解决方法一: 两条数据间进行延时发送,如【tiem.sleep(0.5) #延时0.5s】 解决方法二: 每次发送后等待对方确认接收信息数据,发送一条后就立即接收等待 解决方法三: 设定接收数据大小,发送端每次发送需要发送的数据的数据大小,接收端通过设置【recv(xx)】只接
java和as3 socket通信 解决安全沙箱问题
NULL 博文链接:https://renzaihangzhou.iteye.com/blog/2007855
java Socket与C#通信中中文乱码问题的解决方案
近正在做一个项目,其中遇到了一个问题是java与.NET之间的通信问题。具体的问题是这样的: 客户端使用java,服务器端使用的是C#。两者之间使用基于TCP的Socket通信方式。可是,做了一个测试小例子,结果从客户端传过来的都是乱码。于是上网查,希望可以找到解决方法,可是,网上有好多的答案,经过了很多的实验,都不能很好的解决。没办法只能靠自己一点一点的排查了。 经过一番努力,终找到了原因:C#和java的编码方式不同。虽然找到了原因,但是网上关于这个问题的答案也是百家争鸣,在这里给出源代码,希望对大家有帮助。 首先是客户端的java代码(这是比较简单的部分) im


